每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服务器要想办法为每个用户保存这些数据,以跟踪用户的状态。
Cookie:是客户端技术,服务器把每个用户的数据以Cookie的形式返回给用户各自的浏览器(不同的浏览器不会共享cookie,即不同的浏览器各自保存cookie,而且每个浏览器都有保存Cookie的数量和空间大小限制)。Cookie的一般保存格式为cookie-name/cookie-value/url,当用户再次访问服务器中的web资源时,就会将对应的Cookie数据一起发送给服务器。这样,服务器就可以处理用户各自的数据了。
Cookie的工作过程如下:
i. 当用户第一次发起请求后,服务器接收请求进行处理,创建Cookie(写入到Http响应的消息头中),并将Cookie与请求的资源一起返回给浏览器;
ii. 浏览器接收到响应后,解析资源,并将接收到的Cookie保存到浏览器的缓存文件中;
iii. 当用户再次发起请求,浏览器会先在缓存文件中查找Cookie,如有对应的Cookie,会将Cookie值写入到请求头中,一起发送给服务器;
iv. 当服务再次接收到请求,就可以获取相应的Cookie,并处理用户的数据;
Cookie小结
(1)Cookie在服务器创建,但保存在客户端;
(2)创建Cookie时,key—value都只能是字串符值;
(3)如果不设置最大生命周期,即会话级别的cookie,则当浏览器关闭时,Cookie就消亡;
(4)一个web应用可以存放多个cookie,一般每个站点最多存放50个Cookie,每个Cookie的大小限制为4K,因此Cookie不会塞满硬盘,更不会用作”拒绝服务”攻击手段;但是在客户端Cookie有可能会被篡改,此外对于敏感的数据,尽量不要采用Cookie来保存;如果不得已采用Cookie保存,可以先加密再保存;
Session是服务器端技术,服务器在运行时可以为每一位用户的各个浏览器创建一个独享的session对象。由于session为用户浏览器独享,所以用户在访问服务器的资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器的其他资源时,其他资源可以从用户的各自session中取出数据为用户服务。
Session是如何实现呢?
由上图可以看出,session是通过cookie技术来实现的,即每次请求浏览器就会把JSEEIONID发给服务器,服务器以此ID来获得对应的Session。但默认情况下保存session的Cookie存活在浏览器的时间很短(会话级别的Cookie),一般浏览器关闭后,该Cookie也就消失了。
?session是由服务器创建的,消亡也是由服务器负责的,与浏览器无关。当我们关闭一个浏览器后,再次开启该浏览器,在服务器端不能够获得之前的session对象,只是因为保存session对象ID的cookie消亡了(session对象的消亡,由生存时间或显示的调用invalidate函数决定),但与之对对应的session对象在存活期内仍然在服务器端存在。
当浏览器关闭,重新打开后,如何再次获取未失效的session对象(假设session对象仍然存活)?我们只要在服务端获取session对象的ID,就可以获取到对应的session对象;为此,我们可以将向session对象的ID值依照各个服务器的格式写入到Cookie中,并设置Cookie的存活时间(如果浏览器禁用Cookie,请参考URL重写解决方案),如下
Cookie cookie=new Cookie(“JSESSIONID”,session.getId);
cookie.setMaxAge(60*30);
response.addCookie(cookie);
总结:
l 存在位置
Cookie保存在客户端;session保存在服务器端,服务器可以为每个用户浏览器创建一个会话对象。
l 安全性
比较而言,cookie的安全性比session要弱。因为Cookie默认是以明文的方式来存放的,所以我们一般要加密后再存放。
l 网络传输量
Cookie通过网络在客户端与服务器传输,而session保存在服务器端,不需要传输,但session不易过多,而且session不应该存放占用内存过大的对象;但Cookie过大过多将消耗大量传输量。
l 生命周期
(1)Cookie的生命周期是累计的,如20min,从创建时就开始计时,20min后cookie的生命周期结束,cookie就无效;
(2)Session的生命周期是间隔的,从创建时开始计时。如果在20min内没有访问过session则session失效;若访问过则重新开始计时;
(3)服务器重启或Reload web应用,都会使session失效,但对cookie无效,除非生命周期结束。
l 访问范围
Cookie、Session:为一个用户的一个浏览器独享。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/sunshuolei/article/details/48103261