JSP处理session与cookie关系 (转载)
为什么登陆后,只要不关闭浏览器,session就能一直存在?当然session的数据是保存在服务器上的,但服务器是怎么识别这些数据都是谁的呢?答案是sessionid,每一个浏览者都唯一的sessionid,这就很好的区分了不同浏览者的不同session了.sessionid是怎么产生的?应该是第一次访问服务器的时候随即生成的.假如是111,然后他的登陆信息是true,服务器就知道sessionid为111已经登陆了,这些信息都存在了服务器上了.但当浏览者继续操作的时候,也就是打开该系统的另一个页面的时候sessionid怎么办?如何传递?打开另一个页面的时候其实相当于重新访问系统,如果没有特殊的处理机制,系统会再次重新分配一个sessionid的,这样的话就失去意义了~!所以sessionid在第一次访问后应该存在了客户端.能寸哪呢?当然,只能寸在cookie中了,这就是为什么关闭cookie,session就失去作用了
十三、保存session id的几种方式
A.保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
B.由于cookie可以被人为的禁止,必须有其它的机制以便在cookie被禁止时仍然能够把session id传递回服务器,经常采用的一种技术叫做URL重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。
C.另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
二十五、session cookie和session对象的生命周期是一样的吗
当用户关闭了浏览器虽然session cookie已经消失,但session对象仍然保存在服务器端
二十六、是否只要关闭浏览器,session就消失了
程序一般都是在用户做log off的时候发个指令去删除session,然而浏览器从来不会主动在关闭之前通知服务器它将要被关闭,因此服务器根本不会有机会知道浏览器已经关闭。服务器会一直保留这个会话对象直到它处于非活动状态超过设定的间隔为止。
之所以会有这种错误的认识,是因为大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接到服务器时也就无法找到原来的session。
如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求报头,把原来的session id发送到服务器,则再次打开浏览器仍然能够找到原来的session。
恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为session设置了一个失效时间,当距离客户上一次使用session的时间超过了这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
由此我们可以得出如下结论:
关闭浏览器,只会是浏览器端内存里的session cookie消失,但不会使保存在服务器端的session对象消失,同样也不会使已经保存到硬盘上的持久化cookie消失。
二十七、打开两个浏览器窗口访问应用程序会使用同一个session还是不同的session
通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的session id,这样我们信息共享的目的就达不到了。
此时我们可以先把session id保存在persistent cookie中(通过设置session的最大有效时间),然后在新窗口中读出来,就可以得到上一个窗口的session id了,这样通过session cookie和persistent cookie的结合我们就可以实现了跨窗口的会话跟踪。
2.cookies的属性有:Domain(域):哪个站点发的哪个站点拿走
Expires:是否过期
Haskeys:是否包含关键
path:存放的路径
secure:是否安全
注:---cookies的设置在 sever端设置,路径与域一起构成cookie的作用范围
?这个是什么意思的啊?为什么会是在服务器端进行设置的呢?
---若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie 保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式
3.session(会话):适用于同一客户在一个站点,不同页面上的浏览;适用于同一客户在一个页面上,不断的刷新。
6.当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
IE中:
有效的窗中包括
1.Session对象只在建立Session对象的窗口中有效。
2.在建立Session对象的窗口中新开链接的窗口
无效的窗口包括
1.直接启动IE浏览器的窗口
2.不是在建立Session对象的窗口中新开链接的窗口