会话cookie和持久化cookie实现session机制

来源:互联网 发布:2017淘宝售假新规 编辑:程序博客网 时间:2024/04/28 00:28

1.当你第一次访问一个网站的时候,网站服务器会在响应头内加上

Set-Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),

或Set-CookieJSESSIONID=nj1tvkclp3jh83olcn3191sjq3(java服务器)信息,

此信息是服务器随机生成的,放在服务器内存里,为了标识唯一的客户端用户,内容不会重复,这就是sessionid

.


  2.当浏览器得到这个sessionid会将它放在自己的进程内存里,这里不同的浏览器会有所不同,IE进程间不能共享这个sessionid,也就是新开一个IE将不能共享这个sessionid;而Firefox进程间可以共享.

然后你继续发请求给这个网站的时候,浏览器就会把这个sessionid放在请求头里发送给该服务器了,这样服务器得到sessionid后再和自己内存里存放的sessionid对比锁定客户端,从而区分不同客户端,完成会话

.


  3. 可以看出如果用这种方式,当用户在会话的过程中关闭浏览器结束进程,则这个sessionid将消失,如果用户又打开浏览器想继续这次会话的时候,就会因为发送的请求中没有这个sessionid而使服务器无法辨别该把那个session信息给他,注意(这个时候服务器端的sessionid和sessionid所指向的session都还存在,只是没有正确的sessionid和它匹配而占用服务器内存,只有session过期或服务器重启才释放内存).


   上面这种方式叫会话cookie,把cookie放在浏览器内存里,只能在这个浏览器的内存范围里完成会话,是一种不长久的方式,为了能长久会话,就出现了持久化cookie,把cookie固化在用户的计算机上,现在的cookie不单单能存放sessionid,还能放用户信息,样式表信息等.

   如果用户禁止了所有cookie的使用,那么会话cookie和持久化cookie都不能用了,有个方案也可以解决问题,就是URL重写,这里要说下的就是URL重写只能实现会话cookie的效果,持久会话实现不了.


ps:自己的一些备注

  • 如果在服务器端设置session过期时间,就是持久化cookie了。
  • 如果在代码中 有设置 cookie.setMaxAge(-1);浏览器关闭后COOKIE就会被删除。



转载自:http://rubyeye.iteye.com/blog/196117 ,自己排版了下

原创粉丝点击