http协议本身是一种无状态的协议,引入Cookie以及session主要是为了
来保持连接的状态。
Cookie:是一种在客户端保持连接状态的机制
Session:是一种在服务端保持连接状态的方案。
Cookie机制:Cookie是在客户端浏览器按照一定规则自动发生给服务器端的,浏览器
会检查存储在硬盘上的Cookies,如果改Cookie的作用范围大于或等于改资源的作用范围的
话,Cookie就会依附在http头部,并且发送出去。
Cookie包括:内容、过期时间、名字、路径、域
Session机制:当程序要为某个客户端的请求创建session时,程序的服务器首先会检查这个请求的session id标志 是否存在,
如果存在的话,程序就会按照这个session id 把相应 的session找出来,通常session id 就是Cookie的名字,如果Cookie
被禁止,通常就会采用url重写的方法将session id附加到url路径的后面,目的就是为了一直保持连接状态。因此,我们要想
一直保持连接状态的话,就必须将每一个session id 附加到url路径的后面。
Session的几个问题:
Session何时被创建?
不是在客户端访问时就被创建而是在服务器调用httpserverletRequest.getRequest(true)时,才被创建
Session何时被删除?
A,程序调用httpSession.invalidate() 简单的说就是在客户端发生login off 的操作
B距离上一次收到客户端发送的session id时间间隔超过了session的超时设置 即超时
C, 服务器进程被停止(非持久session)
3, 如何做到关闭浏览器同时关闭session:
严格说做不到,可以让所有的客户端页面使用window.onclose来监视浏览器的关闭东西,然后向服务器发
送一个请求来删除session,但是对于浏览器崩溃或者强行杀死进程时仍然无能为力。