typora-copy-images-to: img
session
概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中,HttpSession
一、HttpSession对象
object getAttribute(String name);
void setAttribute(String name,String value);
void removeAttribute(String name);
HttpSession session = request.getSession();
session.setAttribute("msg","helloWorld!");
//另外的servlet中获取
session.getAttribute("msg");
二、原理分析
session的实现依赖于cookie
三、细节
1.客户端关闭后,服务器不关闭,两次获取的session是同一个吗?默认不是同一个,详见原理分析。为了使其是同一个,HttpSession session = request.getSession();Cookie c = new Cookie("JSESSIONID",session.getID());c.setMaxage(1000);response.addCookie(c);
2.客户端不关闭,服务器关闭,两次获取的session是否为同一个?不是同一个。要确保数据不丢失有如下策略。
- session的钝化:在服务器正常关闭前,将session文件持久化存储到硬盘上。
- session的活化:在服务器关闭后,将session文件转化为内存中的session对象即可。
tomcat可以实现session钝化和活化。(钝化时session存储位置在部署目录下的work文件夹中)
Idea只能完成钝化,但是不能完成活化。(idea会在服务器重新启动时,删除掉work目录)
3.session失什么时候被销毁
- 服务器关闭
- session对象调用invalidate()
- 默认失效时间是30分钟(tomcat中web.xml的session-config/session-timeout可以设置失效时间。)
四、特点
1.session是用于存储一次会话间多次请求的数据。存储在服务器端。
2.可以存储任意类型、大小的数据。
session和cookie的区别
- session存在服务端,cookie存在客户端
- session没有大小限制,cookie有限制
- session相对安全