Cookie & Session
Too young too simple.
由于HTTP协议是无状态的协议,每次请求都是一个独立过程,所以下一次请求无法得知上一次请求产生的一些数据因此产生了cookie,作用是在一次请求介绍后保存一些数据到客户端,客户端在下次请求时携带上这些数据来确定状态。
session & cookie的区别:
- session 存储在服务器端(如果使用的是node,则存储在node服务器端),cookie 存储在客户端(用户本地浏览器)
- session 默认被存在在服务器的一个文件里(不是内存)。也可以存储在文件、数据库或者内存中,比如Redis等中,建议不要存在mysql等数据库中,因为session读取写入很频繁,对数据库压力很大,建议存储在内存数据库中。
- session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
因为session存储在服务器端,所以相对cookie就安全多了。在客户端的cookie里面存放一个ID,然后用这个ID去匹配服务器端的session的,所以客户端只知道这个ID,其他信息都是服务器才知道。
现在一些轻量级的web库,用的是加密的cookie,而不需要用session,这样的好处就是极大的减轻了服务器的工作强度。之前用session不用cookie就是考虑到cookie是存储在客户端,不安全。而现在使用加密的cookie,理论上是安全的。
安全性:
获取
常用使用场景:
- 一般情况,登录信息等重要信息存储在session中,其他信息存储在cookie中。(用户验证 一般会用session)
有效时长
session的有效时长
服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。具体根据服务器设置,一般在二三十分钟左右。
计算开始时间:从session不活动的时候开始计算,一旦session被访问,计时清0。所以:只要session一直活动,就总不会过期。
服务器端设置session的过期时间。
cookie的有效时长
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。
通过过期时间可以设置cookie的有效时长
若不设置过期时间: 表示这个cookie的生命周期为浏览器回话期间,关闭访问服务器的浏览器窗口,cookie就消失了。一般称为回话cookie,保存在内存中若设置了过期时间:则cookie会存储在硬盘上,直到超过有效时间。
cookie:如果用户禁用了浏览器的cookie或者不小心删除了cookie, 则会失效;
默认cookies失效时间是直到关闭浏览器,cookies失效,也可以指定cookies时间。