Cookie和Session

Cookie和Session

刘听风 196 2019-08-13

Cookie是怎么工作的?
——————————————————————————————————

首先必须明确一点,存储cookie是浏览器提供的功能。以{key:value}的形式存在。cookie其实是存储在浏览器中的纯文本,浏览器的安装目录下会专门由一个cookie文件夹中存放各个域下设置的cookie。

当网页要发http请求时,浏览器会先检查是否有相应的cookie,有则添加在request header中cookie字段中。这些是浏览器自动帮我们做的,而且每一次http请求浏览器都会自动帮我们做。这个特点很重要,因为关系到“什么样的数据适合存储在cookie中”。

存储在cookie中的数据,每次都会被浏览器自动放在http请求中,如果这些数据并不是每个请求都需要发送给服务器端的数据,浏览器这设置自动处理无疑增加了网络开销;如果这些数据是每个请求都需要给服务器端的数据(比如身份认证信息),浏览器这设置自动处理就大大免去了重复添加操作。素所以对于那设置“每次请求都要携带的信息(最典型的就是身份证认证信息)” 就特别适合放在cookie中,其他类型的数据就不适合了。

但在localStorage出现之前,cookie被滥用当做了存储工具。什么数据都放在cookie中,即使这些数据只在页面中使用而不需要随意请求传送到服务端。当然cookie标准还是做了一些限制:
    每个域名下cookie的大小最大为4KB
    每个域名下cookie数量最多为20个
    但很多浏览器厂商在具体实现时支持大于20个

Session是怎么工作的?
——————————————————————————————————
Cookie机制弥补了HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。 与Cookie不同的是,session是以服务端保存状态的。

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

cookie和session的比较
——————————————————————————————

一、对于cookie:
①cookie是创建于服务器端
②cookie保存在浏览器端
③cookie的生命周期可以通过cookie.setMaxAge(2000);来设置,如果没有设置setMaxAge,
则cookie的生命周期当浏览器关闭的时候,就消亡了
④cookie可以被多个同类型的浏览器共享  可以把cookie想象成一张表
 
比较:
①存在的位置:
cookie 存在于客户端,临时文件夹中
session:存在于服务器的内存中,一个session域对象为一个用户浏览器服务
②安全性
cookie是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放
session存放于服务器的内存中,所以安全性好
③网络传输量
cookie会传递消息给服务器
session本身存放于服务器,不会有传送流量
④生命周期(以20分钟为例)
(1)cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束,
(2)session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁
但是,如果在20分钟内(如在第19分钟时)访问过session,那么,将重新计算session的生命周期
(3)关机会造成session生命周期的结束,但是对cookie没有影响
⑤访问范围
session为一个用户浏览器独享
cookie为多个用户浏览器共享
 
使session失效的方法:
1.关闭tomcat
2.reload web应用
3.session时间到
4invalidate  session