本文共 1940 字,大约阅读时间需要 6 分钟。
本文通过参考其他优秀博文和谢希仁编著的《计算机网络》对Cookie和Session进行总结
在一文中,我们了解到HTTP是无状态的,服务器无法通过连接跟踪识别用户。因此,采用Cookie和Session技术来跟踪用户会话。
Cookie是通过客户端记录的信息确定用户的信息。
Cookie的工作原理: 当某一用户浏览某个使用Cookie的网站时,该网站的服务器就为该用户产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中产生一个项目。接着在给该用户的HTTP响应报文中添加一个叫做Set-cookie的首部行。这里的“首部字段名”就是“Set-cookie”,而后面的”值“就是赋予该用户的”识别码“。ex: Set-cookie:12345678 当用户收到这个响应时 ,其浏览器就在它管理的文件中添加一行,其中包括这个服务器的主机名和Set-cookie后面的识别码。当该用户继续浏览这个网站时,每发送一个HTTP请求报文,其浏览器就会从其Cookie文件中取出这个网站的识别码,并放到HTTP请求报文的Cookie首部行中,这样网站就可以跟踪该用户在该网站的活动。Cookie具有不可跨区域性:每个网站服务器只能操作自己赋予的Cookie,不能操作其它服务器赋予的Cookie.
ex:Google会向用户赋予一个Cookie,当该用户登录baidu时,baidu也会赋予用户一个Cookie,此时Googel是不能操作baidu赋予的Cookie,baidu同样如此。Cookie有效期
Cookie的maxAge属性决定Cookie的有效期,单位为秒(second)。 若该值为正数,则表示会在maxAge秒后失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。 若该值为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口有效,关闭窗口后该Cookie失效。Cookie默认值为-1 若值为0,则表示删除该Cookie。Session是使用服务端记录用户(客户端)状态信息的一种机制,使用上比Cookie简单些,但是增加了服务器的存储压力。
在客户端访问服务器时,服务器将客户端的信息以某种形式记录在服务器中,这就是Session。当客户端再次访问时只需要在Session中查找该空户的状态就可以了。Session的生命周期
一般情况下,用户首次访问服务器时,服务器会给用户分配一个sessionID来唯一标识这个用户,每个用户具有不同的sessionID。 只有在访问jsp,servlet等程序时才会创建session,只访问html等静态资源并不创建session。 Session保存在客户端,为了获得更高的存取速度,服务器一般把Session存储在内存中。为了防止内存溢出,服务器会把内存中长时间没有活跃的Session删除,这个时间就是Session的超时时间,如果超过了超时时间没有访问过服务器,Session自动失效。用户每访问服务器一次,都认为该用户的Session“活跃(active)”了一次。Session对浏览器的要求:
Session虽然是保存在服务器上,对客户端是透明的,但正常运行仍需要客户端的支持,因为Session需要使用Cookie作为识别标志。服务器会向客户端浏览器发送一个名为JSESSIONID的Cookie,值为该Session的id(也就是HttpSession.getId()的返回值),Session依据该Cookie来识别是否为同一用户。 在许多服务器上,如果浏览器支持Cookie,就直接使用Cookie,如果浏览器不支持或禁止了Cookie,就自动转化为URL-rewriting(重写URL)。重写URL
URL地址重写的原理是将该用户Session的id信息重写到URL地址中,服务器能够解析重写后的URL获取Session的id。(1)Cookie数据存放在客户端浏览器上,Session数据存放在服务器中
(2)Cookie安全性低,别人可以分析存放在本地Cookie文件进行Cookie欺骗,Session相对比较安全 (3)Session存放在服务器,当访问增多,会给服务器带来存储压力,影响服务器性能 (4)在客户端,一个浏览器能创建的Cookie数量最多为300个,并且每个不能超过4KB,每个Web站点能设置的Cookie总数不能超过20个 (5)综上,将登录信息等重要的信息存放在Session中,将其它信息若要保留,存放在Cookie中。转载地址:http://oceii.baihongyu.com/