cookie
是浏览器提供的一种能力,可以在每次发起请求前,带上cookie里面的内容(一些key,value值)
分类:
- 会话级cookie:默认情况,就是会话级cookie,有效时长只有在窗口还打开的时候
- 持久cookie:在设置一些字段控制的时候,就可以设置cookie的持续时长(比如setMaxAge)
注意:cookie可以是web服务器添加的,原理就是在我们进行某一个请求的时候,如果这个请求携带了一些控制cookie的字段,那么就会使得我们浏览器设置了cookie
并且大小一般只有4kb,并且每个站点最多20条
session
是基于cookie实现的一种解决http无状态的方式
-
原理: 在我们第一次登录请求时,服务端会开辟一个空间用于存储这次登录的信息
session
,这个session
可以通过sessionID
来找到,所以服务器会把sessionID
返回给浏览器【自动存储到cookie
里面】,然后我们发起下一次请求的时候就自动(通过cookie
)上这个sessionID
,那么服务器就能识别我们的登录状态了 -
缺点:由于
session
是存储在服务器,所以当我们服务器采用了负载均衡的时候,如果我们在A服务器有我们session
,当A服务器压力过大,我们的请求被分配到了B服务器,那么B服务器算识别不到我们的sessionID
的,因为只有A有我们的session
token
也是一种解决http无状态的方式,是存储了我们用户状态等信息的字符串
在我们第一次发起登录请求的时候,服务器返回给我们一个token
字符串,然后这个token
字符串由浏览器存储
- 在我们后续发起请求的时候,我们可以把token带在
cookie
或者请求体里面 - 服务器通过解析我们的
token
,识别我们的状态和信息
优点: 存储在客户端,所以服务器空间压力变小(解析时间压力变大??),由于可以不同存储在cookie
,对移动端更友好(cookie
是浏览器的机制)
区别
- cookie是一种浏览器的机制,session和token是解决http无状态(身份验证)的方式
- session存储在cookie中,token可以存储在cookie和响应头里面
- session存储在服务器,token存储在客户端