Session 的生命周期解析
1.Session的作用
Session是每个用户去访问服务器时,服务器为其创建的一个域对象,这个对象是通过 request.getSession()创建的,当然是客户第一次访问时需要才会创建,以后都不会创建,在session域中,可以存入用户的信息,打个比方,我们在京东是订购了东西后,点击查看购物车时就可以看到我们订购的商品,者中技术就可以用session域来实现,每个人订购的东西不同就可以看到不同的购物车,session这是为单一用户创建。
2 session的生和死
当第一次调用 request.getSession()时会创建session会话对象,注意不是访问一个web资源就会创建一个session对象,而是在第一次调用前面的方法是才会创建对象,有点啰嗦了。创建后,就可以通过session.setAttribute(名称, 值) 来存取数据。当创建了session对象后,注意服务器后创建这个session的id号,并且会通过cookie形式回写给浏览器,这个cookie的名称是JSESSIONID,你可以通过httpwatch来查看到,在你以后访问其他页面时,浏览器都会带着这个cookie来,这就是为什么每个用户的session都不一样的原因,讲完了它的生,在来说它的死,它的死有两种,一种是默认的死,什么叫默认的死,就是程序员不管的死。这种死的期限是当你不用session后30分钟,服务器会自动的销毁它,有人会问当我把浏览器关了session对象还存活吗?这个是session还存活在吗?这个要看你最后一次使用session的时间了,如果超过了30分钟就没有,如果没有超过30它还是会有的。说到这个,有的人又会问了,那我在打开一个浏览器不是一样还可以得到原来的session。这个是不会,为什么呢?就是因为如果你要得到原来的session对象,浏览器必须要带着cookie去,因为cookie里面有该session的Id号,但你一旦关闭了浏览器cookie就没了,也就是意味着你没有了session的id,你没有了id怎么去找session了?那么如果我想关闭浏览器后在打开浏览器还想找到原来了session怎么办?这个问题很简单,那你就要手动的写cookie了,并且设置一个时间期限,代码如下
Cookie cookie = new Cookie(); //手动创建cookie
coookie.setAttribute("JSESSIONID", session.getId()); //写cookie,注意一定是JSESSIONID,只有这 样才能覆盖
cookie.setMaxAge(30*24*60*60); //设置cookie的存活期是一个月,
cookie.setPath(url);//设置访问什么资源的时候带cookie来
response.addSession(session);
好,解决了怎样关闭浏览器在打开后还是可以找到原来的session之后,我们回到session的死这个话题上来
上面说到服务器默认的时间是30分钟,那我要改变它的时间让它快点死或者晚点死怎么办呢?有一种方法就是在web.xml文件上进行配置。如下配置代码
<session-config>
<session-timeout> 20</session-timeout>
</session-config>
<session-timeout> 20</session-timeout>
</session-config>
这里设置的是20分钟,你也可以任意的该,注意是也分钟为单位的。如果你想写java代码让它死的话,就只用写一句话就Ok,session.invalidate();这样session对象马上就会销毁。
如果看到这里你还是不懂Session,可以和我交流,我们一起成长,我的QQ:642963259