token和session区别

前言

token 和 session 功能是一样的,都是要与浏览器建立连接,获取与客户端对应的用户数据,只不过完成这个功能的实现方式不太一样。

区别

session

session 的使用方式是客户端 cookie 里存 id,服务端 session 存用户数据,客户端访问服务端的时候,根据 id 找用户数据。

token

而 token 的使用方式是客户端里存 id(也就是 token)、用户信息、密文,服务端什么也不存,服务端只有一段加密代码,用来判断当前加密后的密文是否和客户端传递过来的密文一致,如果不一致,就是客户端的用户数据被篡改了,如果一致,就代表客户端的用户数据正常且正确。

总结

从上面可以看出:
session 是存储在服务器当中的,浏览器端存储的只是一个 session id,保存在 cookie 中,由于 cookie 是自动携带在请求中的,所以整个过程都是由服务器来处理的,前端无需操作。
而 token 是完全保存在浏览器端的,然后再由前端操作,一般是放在请求头的 Authorization 里面,以供服务器来验证身份。同时,token 还可以用来防护 CSRF 攻击。

流程

session

注册登录->服务端将 user 存入 session->将 sessionid 存入浏览器的 cookie->再次访问时根据 cookie 里的 sessionid 找到 session 里的 user

token

注册登录->服务端将生成一个 token,并将 token 与 user 加密生成一个密文->将 token+user+密文数据 返回给浏览器->再次访问时传递 token+user+密文数据,后台会再次使用 token+user 生成新密文,与传递过来的密文比较,一致则正确。