您的位置:首页 > 其它

Cookie、Session

2015-08-30 11:40 323 查看



每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服务器要想办法为每个用户保存这些数据,以跟踪用户的状态。

1、Cookie

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保存,可以先加密再保存;

2、Session

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:为一个用户的一个浏览器独享。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: