http本身是无状态,那他是如何实现识别session的呢?
我通过wireshark 抓包发现。第一次在登陆页面调用GET请求的时候,并无session的信息,服务器响应的时候为该用户创建并维护一个sessionID,并将这个session信息插入到cookie当中。也就是http报文中的 Set-Cookie字段,这里设置了JsessionID=xxxxxxx。然后浏览器继续访问其他页面的时候,cookie字段就带着JsessionID=xxxxxxxx。服务器会根据请求的页面以及session里面的具体的信息给用户返回相应的页面。这就是实现了会话的保持。
为什么有的session关闭浏览器之后就结束了?
因为 通过cookie建立起来的session只是识别cookie,没有设置cookie的过期时间,那么cookie的过期时间默认为浏览器关闭时。所以关闭之后,只保存在内存中的cookie信息就被清除掉了。再访问服务器的时候,由于没有cookie里面的session信息,所以需要重新输入用户名和密码。
实际上,当浏览器关闭的时候,意味着浏览会话的关闭,这个时候并不向服务器发送任何消息,关闭浏览器,保存在内存中的cookie自动释放。
如何设置自动登陆,不用登陆用户名和密码呢?
方法就是修改cookie,将cookie的过期时间设置的长一点,我设置的是2015年的某天,这样让cookie存盘,当重启的时候就可以不用输入用户名和密码了,因为cookie不会因浏览器的关闭而被清除了。
如何修改cookie?
这篇文章有各种浏览器的插件,装上就能用了。
如何防止cookie泄露导致的用户名和密码被盗取?
在最后不是直接关闭浏览器,而是点击注销按钮注销当前用户才可以,否则即使修改密码也没用。
通过cookie实现会话保持是一种非常常见的方式,如果浏览器禁用了cookie,很多需要登录的网站将无法访问,因为cookie的方式更加安全。比如我测试禁用了新浪微博,还有chinaunix,网易邮箱的cookie,发现这些大型网站无法正常登录了,还有学校的统一门户系统也无法正常登录了。可见很多网站都是基于cookie来保持会话的。
阅读(1397) | 评论(0) | 转发(0) |