1.session的ID
当用户在一个页面浏览并创建了一个session后,在另外一个页面得到那个session,浏览器是如何知道拿哪一个session给用户呢?原理是:
session是基于cookie的,创建session的时候会为session创建一个id号,当另外一个页面去得到session时,就会按照cookie的id号去获取相应的session。
但是要注意的是,这个cookie是没有有效期的,浏览器一旦关闭它就没有了,所以需要对这个cookie设置有效期。(可以做到用户关闭浏览器后,买的东西还在)
解决方法:
覆盖设置id号的cookie,并设置有效期
String sessionid=session.getId();
Cookie cookie=new Cookie("JSESSIONID",sessionid);//将设置session的id号的cookie覆盖(名字叫"JSESSIONID",不要弄错)
cookie.setPath("/day07");
cookie.setMaxAge(30*60);//有效期半小时
response.addCookie(cookie);
2.session集合技巧
比如用户买书,买来的书不能直接装进session里面,因为session里面有可能会有其他的东西存在(比如用户姓名),这样会和其他的东西混在一起,最合适的情况是,把用户所买的书封装成一个集合,之后放入session中,然后取出该类物品时,只需要取出相应的集合即可。
例子:
//从session中得到用户用于保存所有书的集合(购物车)
List list=(List)session.getAttribute("list");
if(list==null){
list=new ArrayList();
session.setAttribute("list", list);
}
list.add(book);
session.setAttribute("list", list);
3.session的生命周期
开始(生):第一次访问getSession代码时。(而不是访问网站时创建的)
结束(死):会话结束时(关闭浏览器)session不会立即死亡,当session在30分钟没人用的时候才会被服务器清除,如果不关闭浏览器,30分钟后session同样会被摧毁。session对象是由服务器管理的。
session的失效时间是可以控制的:
1.在web.xml里面这样配置:
<session-config>
<session-timeout>10</session-timeout>
<session-config>
注意,<session-timeout>里面配置的是session失效的时间,以分钟为单位。
2.代码实现: