javasession⽣命周期_Session的⽣命周期
以前在学习的时候没怎么注意,今天⼜回过头来仔细研究研究了⼀下Session的⽣命周期。
Session存储在服务器端,⼀般为了防⽌在服务器的内存中(为了⾼速存取),Sessinon在⽤户访问第⼀次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调⽤
Session什么时候失效?
1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。
2. 调⽤Session的invalidate⽅法。
Session对浏览器的要求:
虽然Session保存在服务器,对客户端是透明的,它的正常运⾏仍然需要客户端浏览器的⽀持。这是因
为Session需要使⽤Cookie作为识别标志。HTTP协议是⽆状态的,Session不能依据HTTP连接来判断是否为同⼀客户,因此服务器向客户端浏览器发送⼀个名为JSESSIONID的Cookie,它的值为该Session的id(也就是Id()的返回值)。Session依据该Cookie来识别是否为同⼀⽤户。
该Cookie为服务器⾃动⽣成的,它的maxAge属性⼀般为-1,表⽰仅当前浏览器内有效,并且各浏览器窗⼝间不共享,关闭浏览器就会失效。因此同⼀机器的两个浏览器窗⼝访问服务器时,会⽣成两个不同的Session。但是由浏览器窗⼝内的链接、脚本等打开的新窗⼝(也就是说不是双击桌⾯浏览器图标等打开的窗⼝)除外。这类⼦窗⼝会共享⽗窗⼝的Cookie,因此会共享⼀个Session。
注意:新开的浏览器窗⼝会⽣成新的Session,但⼦窗⼝除外。⼦窗⼝会共⽤⽗窗⼝的Session。例如,在链接上右击,在弹出的快捷菜单中选择"在新窗⼝中打开"时,⼦窗⼝便可以访问⽗窗⼝的Session。
如果客户端浏览器将Cookie功能禁⽤,或者不⽀持Cookie怎么办?例如,绝⼤多数的⼿机浏览器都不⽀持Cookie。Java Web提供了另⼀种解决⽅案:URL地址重写。
URL地址重写是对客户端不⽀持Cookie的解决⽅案。URL地址重写的原理是将该⽤户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不⽀持Cookie,也可以使⽤Session来记录⽤户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该⽅法会⾃动判断客户端是否⽀持Cookie。如果客户端⽀持Cookie,会将URL原封不动地输出来。
如果客户端不⽀持Cookie,则会将⽤户Session的id重写到URL中。
javaservlet和jsp的比较注意:TOMCAT判断客户端浏览器是否⽀持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会⽀持Cookie,但是由于第⼀次请求时不会携带任何Cookie(因为并⽆任何Cookie可以携带),URL地址重写后的地址中仍然会带有jsessionid。当第⼆次访问时服务器已经在浏览器中写⼊Cookie了,因此URL地址重写后的地址中就不会带有jsessionid了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论