一.session和cookie的区别
cookie: 把用户数据写给用户的浏览器,用户数据保存在本地.
session:把用户数据写给到用户独占的session中,
session对象创建好了在服务其中,根据cookie中存放的id找到每个用户对应的session.
二.session销毁的两种途径
1.调用invalidate()方法
2.没有人访问session达到指定时间(例如开着浏览器但跑出去玩了
时间配置:以分钟为单位
<session-config>
<session-timeout>30</session-timeout>
</session-config>
三.更改session所依赖cookie的存储时间
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session=request.getSession();
String id=session.getId();
/*
* session是依赖于cookie的,但它并没有指定cookie的存放时间,所以浏览器一关闭,该session销毁.
* 但现实应用中,如电商网站,若用户一不小心将浏览器关闭,我们不能让用户重新选择刚刚已经选择好的商品,则自已新建一个存储session id的cookie,覆盖原来的cookie
*/
Cookie cookie=new Cookie("JSESSIONID", id); //默认id对应的名字为"JSESSIONID"
cookie.setPath("/test"); //设置可以访问该cookie的路径为该app
cookie.setMaxAge(30*60); //我们设置session在没人使用30分钟后即失效,则对应其存储id的cookie也设为相同时间
response.addCookie(cookie);
session.setAttribute("name", "aaa");
}
四.session的序列化(关闭服务器生成文件)
1.关闭序列化
/apache-tomcat-9.0.5/conf/context.xml 中加入: <Manager pathname="" />
2.序列化:关闭服务器后,会自动生成一个文件保存session中的数据.等到服务器开启式,读取文件,文件消失.
文件地址:tomcat/work/catalina/localhost/项目/SESSIONS.ser
3.session中存放的属性也会跟着一起序列化, 前提: 实现serilizeble接口
五.钝化与活化(没关就生成)
1.钝化:超过规定时间,session从内存转移到硬盘中,生成session文件(seesionid.session *一个session一个文件)
或:活动会话数目太多,达到限制值
生成地址:tomcat/work/catalina/localhost/项目/
2.活化:从硬盘中加载session到内存 (处于会话的客户端向服务器发出请求)
3.配置:
六.session的历程
1.创建:当一个浏览器第一次请求访问一个应用中支持会话的网页
-->servlet容器寻找请求中带sessionid的cookie-->找不到-->创建session对象
-->将sessionid作为cookie保存在相应结果中
-->浏览器收到相应结果,将cookie保存在客户端
2.再次访问(同一个应用中任意一个支持会话的页面):
http请求中包含带sessionid的cookie-->servlet容器在请求中寻找
--->找到后,根据id找到内存中对应的session对象(即客户端只保存sessionid,真正的session在服务器端)
3.销毁
1)浏览器进程终止(*可根据上面的示例设置对应session的cookie,是关闭浏览器后cookie保存在本地)
2)invalidate()方法
3)会话过期 (也可进行相关配置,使超过时间后session钝化,存放至服务器硬盘)
设置会话最大不活动时间:setMaxInactiveInterval(秒); !!若为负数,代表永久