您好,欢迎访问一九零五行业门户网

Session的生命周期

以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下session的生命周期。
session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),sessinon在用户访问第一次访问服务器时创建,需要注意只有访问jsp、servlet等程序时才会创建session,只访问html、image等静态资源并不会创建session,可调用request.getsession(true)强制生成session。
session什么时候失效?
1. 服务器会把长时间没有活动的session从服务器内存中清除,此时session便失效。tomcat中session的默认失效时间为20分钟。
2. 调用session的invalidate方法。
session对浏览器的要求:
虽然session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为session需要使用cookie作为识别标志。http协议是无状态的,session不能依据http连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为jsessionid的cookie,它的值为该session的id(也就是httpsession.getid()的返回值)。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中。
注意:tomcat判断客户端浏览器是否支持cookie的依据是请求中是否含有cookie。尽管客户端可能会支持cookie,但是由于第一次请求时不会携带任何cookie(因为并无任何cookie可以携带),url地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入cookie了,因此url地址重写后的地址中就不会带有jsessionid了。
以上就是session的生命周期的详细内容。
其它类似信息

推荐信息