Session
一. 概念和实现步骤
服务器端的会话技术,能在一次会话接收多次请求并作出多次响应,并且这些请求响应的数据是共享的。
实现步骤:
1、获取Session对象
HttpSession session = request.getSession()
2、使用Session对象
session.setAttribute(String , Object)
session.getAttribute(String)
session.removeAttribute(String)
二. Session的原理
Session的实现的基于Cookie的
1、当使用request对象调用getSession来获取Session对象时,
先对请求头中的cookie进行的判断是否有JSESSIONID,并且这个id有与之匹配的Session对象在服务器中,
如果没有,则创建一个Session对象给调用者;
如果有,则将已有Session对象赋值给调用者来获取Session。
2、当Session对象获取后,会将这个Session对象的id作为值,将"JSESSIONID"作为键,放在Cookie对象中,再将此Cookie对象放到响应头的set-cookie中
3、当客户端下次再请求同一站点时,会将得到的 JSESSIONID=id值 放在请求头的cookie中,此时服务器会将内存中已有的 Session对象的id 与传递过来的 id值 进行比较
4、如果客户端关闭过,由于JSESSIONID所在的Cookie是会话级别的(浏览器关闭就释放),那么这个JSESSIONID就会被释放,从而就没有与服务器中的Session对象的id值进行匹配的
JSESSIONID值,此时就无法获取存储在Session域对象中的数据
如果想要在客户端关闭后仍然可以获取Session域中的数据,解决办法:将JSESSIONID持久化
1、获取Session对象的id值
2、将这个id值作为值,将"JSESSIONID"作为键,放在Cookie对象中
3、使这个Cookie对象持久化
三. Session的失效时间
默认情况下是 tomcat->conf->web.xml中描述的30分钟
<session-config> <session-timeout>30</session-timeout> </session-config>
在当前项目中的web.xml中自定义失效时间
<session-config> <session-timeout>minutes</session-timeout> </session-config>
钝化、活化
- 钝化:在服务器正常关闭时,会将session对象序列化到tomcat->work下
- 活化:在服务器开启后,会将session文件读取到内存中
调用session的invalidate():自杀
四. Session的特点
1、session存储数据的大小没有限制
2、sesion中可以存储一次会话的多次请求的数据,放到服务器中
五. Session与Cookie的区别
1、Session在服务器中,Cookie在客户端中
2、Session没有数据大小的限制,Cookie有
3、Session是域对象,可以在多次请求中获取域对象中的数据
4、Session相对安全,Cookie相对不安全