Cookie和Session的运行机制

Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份,相应的也增加了服务器的存储压力。
HTTP协议是无连接无状态的协议。 无连接是指限制每次连接只处理一个请求,服务器处理完客户端的请求,并收到客户端的应答后就断开连接,这样可以节省传输时间。无状态是指协议对于事务处理没有记忆能力,如果后续需要处理前面的信息,则必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

Cookie

由于HTTP是无状态协议,所以服务器单从网络连接上无法得知用户的身份,于是服务器就给每个客户端发一个通行证,无论谁访问都必须携带这个通行证访问,服务器从而就能确认客户身份。这就是Cookie的工作原理。

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

Cookie具有不可跨域名性。域名www.google.com颁发的Cookie不会被提交到域名www.baidu.com去。这是由Cookie的隐私安全机制决定的。隐私安全机制能够禁止网站非法获取其他网站的Cookie。

Cookie的maxAge有三种情况:
1.大于0。浏览器会将Cookie持久化,写到对应的Cookie文件中。不管用户关闭浏览器还是关闭电脑,只要在maxAge之前,登录网站时Cookie还是有效的。
2.小于0。表示Cookie只在浏览器本窗口及其子窗口有效,不会持久化也不会写到文件中,Cookie的内容被保存在浏览器内存中,当用户关闭浏览器Cookie就消失。Cookie默认的maxAge的值是-1。
3.等于0。表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除。

Session

浏览器客户端访问服务器时,服务器把客户端的信息以某种形式存在服务器上,这就是Session。当客户端再次访问时,只需要从Session 中查找客户的状态就行。

Session的使用比Cookie方便,但是过多的Session存储在服务器内存中,会对服务器造成压力。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

该Cookie为服务器自动生成的,它的maxAge属性一般为–1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值