什么是cookie

HTTP是无状态的协议,服务器为了与浏览器进行会话跟踪,必须主动维护一个状态,用于告知服务端前后两个请求的是否来自同一个浏览器。这个状态需要通过cookie或者session去实现。
cookie存储在客户端:cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。
cookie是不可跨域的:每个cookie会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的(靠domain)。

什么是session

session是另一种记录服务器和客户端会话状态的机制
session是基于cookie实现的,session存储在服务器端,sessionid会被存储到客户端的cookie中
session的认证流程
1.用户第一次请求服务器,服务器根据用户提交的相关信息,创建对应的session
2.请求返回时将此session的唯一标识信息sessionID返回给浏览器
3.浏览器接收到服务器返回的sessionID信息,会将信息存入cookie中
4.当用户再次访问服务器,请求带上cookie信息,服务端会从cookie中获取sessionID信息,并校验其是否可用有效
sessionID是连接cookie和session的一道桥梁

什么是token

简单token组成
uid:用户唯一身份标识
time:当前时间戳
sign:签名
每次请求都会携带token,需要把token放到HTTP的header里
基于token的用户认证是一种服务端无状态的认证方式
token完全由应用管理,可避开同源策略

token和session有啥区别

session是一种记录在服务器和客户端的会话状态机制,服务端有状态化,可记录会话信息
token是令牌,访问资源接口所需要的资源凭证,服务端无状态话,不存储会话信息

假如用户数据可能需要和第三方共享,或者允许第三方调用API接口,用token比较合适

什么是JWT

JSON Web Token(JWT)是目前最流行的跨域认证方案,是一种认证授权机制,且无需担心跨域资源共享问题(CORS)
JWT认证流程
1.用户输入用户名、密码,服务端认证成功返回客户端JWT
2.客户端将其保存在本地(localstorage、或者cookie)
3.用户请求受保护的资源时,请求头的Authorization字段中使用Bearer模式添加JWT
Authorization:Bearer

常见问题

使用session常见问题
session是存储在cookie中的,当浏览器禁止了cookie,一般需要把sessionid加在url参数后重写url
使用cookie常见问题
cookie无法跨域
移动端对cookie的支持不友好,一般常用token
使用token常见问题
token由应用管理,可避开同源策略
token可避免CSRF攻击
使用JWT常见问题

参考自:https://zhuanlan.zhihu.com/p/164696755