只要关闭浏览 器,session就消失了
session靠Cookie来维持,每次给客户端一个cookie里面存放session id,然后请求的时候,服务器根据session id找到对应的session。这个cookie是在浏览器关闭的时候就实效的,自动登录的cookie需要设置成为关闭浏览器后还有效的那种。
今天晚上我做了一个晚上的试验。。证明了一个道理如果你使用的是遨游或者ie7这样的基于标签的浏览器。那么当你在一个窗口中创建 session以后,其他的所有标签都用这个session。。也就是说。如果你登陆一个网站,而网站用的是session。你用两个账号登陆,第二个账 号创建的session会将第一个覆盖掉。除非你重开始菜单中打开另一个全新的遨游或者ie7.这个新打开的窗口才是一个全新的。你这个时候在第二个遨游 或者ie7中打开网站后,你将同时拥有两个账号。
关于ie6是这个样子的。如果你打开一个网站,然后重网站的链接打开了新的ie6窗口,那么新的ie6窗口继承自上个窗口。那么他们的session是共用的。也就是说,你在继承打开的第二个窗口中重新登陆以后第一个窗口的session也会随第二个窗口改变。
在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览 器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说 也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所 以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的 HTTP请求头,把原来的sessionid发送给服务器,则再次打开浏览器仍然能够找到原来的session。
恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
附:开两个浏览器窗口访问应用程序会使用同一个session还是不同的session?
对session来说是只认id不认人,因此不同的浏览器,不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。