关于session、cookie、token的使用思考
一、什么是Session、Cookie、Token
首先,因为HTTP是一种无状态协议,因此,保存用户的登录状态及相关的登录验证就需要使用Session、Cookie或Token。
1、Session

当客户端发起请求后,启用了Session的服务器会自动生成一个Session id,该值是唯一的,与传来的用户绑定后将其返回给客户端同时设置Cookie的信息,下次客户端发起请求时会将cookie一起发送。
因为Session是存储在服务器的,一定程度上是安全地,但因为每个用户都会生成一个Session,当同时请求次数多时会对服务器带来一定的影响。
2、Cookie

Cookie的存在使得客户端几乎可以永远保持登录在线的状态,。不过这样也带来了极大的风险,在Web发展的早期,Cookie里会存放一些比如用户名、密码等等极为隐私的信息,虽然这样方便了用户,但同样带来了极为重大的安全隐患,比如可以利用Cookie伪造登录请求,离线暴力破解Cookie等等。当人们意识到安全隐患后,有选择使用加密Cookie或者加密Cookie信息的手段,也有使用Cookie和Session混合验证的方法。不过随着时代的发展,服务器均衡负载等技术手段的出现,也代表着单Cookie、Session或者Cookie+Session的验证手段具有很大局限性,因此,Token 应运而生。
2、Token
为了解决上面描述的局限性问题,使用Token,就是很好的解决方案。当客户端发送登录请求后,服务器这边会拿到用户名、登录密码,经过数据库存储的用户信息验证成功后,将其进行哈希计算(加盐)、或者使用密钥加密并将其base64编码后,返回给客户端,客户端拿到token后,将其存储到Cookie里,当然也有可能出现客户端禁用Cookie的情况,所以可以附加在URL里传参,这样一来,用户登录成功后,每次向服务器发送请求时都会附带Cookie或者URL里的token值,服务器拿到对应参数重新计算就可以知道登录状态。

浙公网安备 33010602011771号