Session
一、概述
当用户访问服务器的web资源时,服务器会给每个用户浏览器创建一个独享会话对象(Session对象),也是一个域对象,存放用户的数据。当用户再次访问时,就可以拿出这些数据给用户服务了。
二、实现原理
服务器如何识别不同用户浏览器的?
当用户浏览器第一访问服务器时,服务器向浏览器发送一个带JSESSIONID的cookie。当用户浏览器再次发出请求时,通过判断带过来的Cookie来识别不同的用户浏览器。
服务器怎么知道浏览器关闭了呢?
因为服务器发送给浏览器的cookie没有设置有效时间,cookie数据是存在内存中的,所以关闭浏览器,cookie被清除。下次发出请求时浏览器没有带过来相关的cookie,服务器会重新创建一个session。那么,旧的session呢?它有个定时器,默认是30分钟,在这之后没有新的请求,session就会被清除。
三、Servlet Session API
获取Session
Session的创建是服务器的事。已经存在就获取,不存在就重建;一个浏览器独占一个Session对象。
request.getSession();
添加和获取Session数据
session.getAttribute(name); session.setAttribute(name,value);
实现浏览器关闭后还能找到原来的session
自己创建一个同名(JSESSIONID)的Cookie,覆盖原来的Cookie,再设置有效时间
response.addCookie(new Cookie("JSESSIONID",session.getId()+"").setMaxAge(60*30));
确保Cookie有效时间和Session销毁时间一致
tomcat服务器的默认session销毁时间是30min
可以通过在项目中的web.xml添加session-timeout来实现延长session的生存时间<session-config> <session-timeout>30</session-timeout> </session-config>