Session:
1.概念:服务器端会话技术,一次会话的多次请求间共享数据,将数据保存在服务器端的HttpSession对象中
2.基本方法
1.获取HttpSession对象
HttpSession session = request.getSession();
2.使用HttpSession对象
Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name)
3.基本原理:
Session的实现依赖于Cookie
步骤:
1.服务器端第一次获取HttpSession对象,没有
cookie,会在内存中创建一个新的HttpSession对象,
并且会产生一个唯一的SessionID,通过set-cookie响应头
返回该SessionID
2.再次访问服务器端,通过请求头的cookie,携带SessionID到
服务器端,并且按照该SessionID查找内存中是否有一个
该id的HttpSession对象,如果有,则getSession()将该对象
返回给HttpSession引用,就获取到了该对象
注意:所以获取的session是同一个
4.细节:
1.当客户端关闭后,服务器不关闭,两次获取session是同一个吗
不是,因为当客户端关闭后,客户端中cookie中的JSESSIONID会消失,
打开浏览器后,再次请求服务器时候,不会携带JSESSIONID的cookie,
也就找不到服务器中的那个session对象了
如果需要在关闭浏览器后,仍可以获取同一个session,需要设置JSESSIONID以及最大存活时间(持久化)
Cookie jsessionid = new Cookie("JSESSIONID", session.getId());
jsessionid.setMaxAge(60*60);
response.addCookie(jsessionid);
2.客户端不关闭,服务器关闭后,两次获取session是同一个吗
不是,服务器关闭后,内存中的session对象会被销毁
为了服务器session中数据不丢失:
session的钝化:
在服务器正常关闭后,将获取的session对象序列化到硬盘上
session的活化:
在服务器启动后,将session文件转化为内存中的session对象
注意:部署项目时,用本地tomcat,因为它会自动进行session对象的序列化和反序列化
3.session什么时候被销毁
1.服务器非正常关闭(正常关闭会被序列化)
2.session对象调用invalidate()
3.session默认失效时间30分钟
选择性配置
在tomcat的apache-tomcat-8.5.31\conf下的web.xml中设置
<session-config>
<session-timeout>设置存活时间(分钟)</session-timeout>
</session-config>
5.session的特点:
1.session用于存储一次会话的多次请求的数据,存在服务器
2.session可以存储任意类型,任意大小的数据
session与cookie的区别
1.session存储数据在服务器端,cookie在客户端
2.session没有数据大小限制,cookie有限制4kb
3.session数据安全,cookie相对不安全