cookie
cookie是存放在客户端的,主要用于会话管理和用户数据保存;cookie通过http报文的请求头部分发送给服务器,服务器根据cookie就可以获取到里面携带的session id(用于获取服务器中对应的session数据),因为http是无状态协议,我们通常就是通过cookie去维护状态的
cookie是在客户端第一次访问到服务器时,服务器生成并返回给客户端的
cookie也分为会话cookie和持久cookie,会话cookie存放在内存中,浏览器关闭时自动删除;持久cookie则存放在硬盘,有一个过期时间,在时间内cookie有效
优点:简单易用
缺点:大小有限,存放数据少;容易被人为篡改,安全性低
session
session和cookie不同,session存放在服务器中,session用于记录客户端的信息还有用户的状态,我们通过cookie的session id去访问服务器中的session以获取用户的状态
优点:安全性高,不易被修改;存放数据量大
缺点:资源消耗
token
token,拿jwt来说,就是一个字符串,由头部,负载,签名三个部分组成
token主要用于用户的登录验证,token由服务器生成,保存在客户端,在用户首次登录成功时返回,token可以存放在cookie中或者本地存储中,一般存放在local storage,通常会使用一些加密算法对token进行一些保护,例如SHA256
token在一定程度解决了cookie安全性低的问题,不会出现CSRF攻击(跨站请求伪造)的问题,对方无法直接获取到token
优点:安全性高,单点登录友好,适用于移动端
缺点:存在token过期的问题