关于session的那些事儿

什么是Session?
**Session是服务器为每个访问这个服务器的客户端用户创建的一个容器。**这个容器中存储的数据能够在多个request之间实现共享。而且,这个容器只属于当前这个用户,有一个唯一的id。Session技术就是在服务端存取会话的数据

session的特点

每个session有id,存取key-value
数据有存活时间
每个Session的JESSIONID不同,使每个浏览器访问自己的数据不受他人影响

session图解
在这里插入图片描述
Session如何存取数据?

获取Session
HttpSession request.getSession() 获取session对象,有session对象就返回创建的session,没有session就创建session对象
存数据
setAttribute(key,value)
读数据
getAttribute(key)
获取session的id
String session.getId()

session的销毁
1.时间超出了session的存活时间自动销毁
session的默认存活时间是30分钟,可以通过在tomcat的全局配置文件web.xml中(tomcat/config/web.xml)中设置session的存活时间(单位/分钟)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
           version="3.1">
    <!--将session的存活时间设置成1小时(60分钟)-->
    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>
</web-app>

2.在servlet中调用**session.invalidate()**方法来销毁session

session持久化
当浏览器关闭后,JSESSIONID就消失了,再次访问的时候又会重新创建了一个新的session对象。这样操作会比较消耗资源,所以我们需要实现session的持久化,下次使用直接从浏览器获取以前的JSESSIONID,而不创建新的session。

浏览器关闭后JESSIONID这个cookie消失了。再次访问的时候,就不能够在识别这个session了。

session的持久化的方法:
1.通过将session的JSESSIONID保存到cookie中,设置存活期,下次访问直接带给服务器。

就是能够在较长的时间内,能够通过JSESSIONID识别session,下次再访问就不用创建session,通过将JSESSIONID保存到cookie中,社遏制存活日期,下次访问的时候,直接将cookie带给服务器,获取JSESSIONID,得到session对象。

案例实现:

WebServlet("/JSESSIONID_Cookie")
public class JSESSIONID_CookieServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //实现持久化session
        HttpSession session = request.getSession();
        //获取sessionid
        String id = session.getId();

		//这里注意,这个key一定要是JSESSIONID
        Cookie cookie = new Cookie("JSESSIONID",id);
        //设置cookie存活时间,将JSESSIONID存入cookie
        
        cookie.setMaxAge(60*30);

        //响应回浏览器
        response.addCookie(cookie);
    }
}

2.tomcat 中关闭服务会自动把session持久化 (存储在work目录下的一个session.ser),下次访问服务器直接从这个文件读取

猜你喜欢

转载自blog.csdn.net/weixin_42777004/article/details/108607855