企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] >[success] # cookie 和 token 的区别 **cookie** 和 **token** 都是用来做 **身份认证** 的,只不过是方式不同。 >[success] ## cookie **cookie** 是 **用户在浏览器端登录成功** 后, **服务端** 通过在 **response 响应头** 中加入 **set-Cookie** 向 **浏览器** 中添加 **cookie** ,在后续该网址 **请求接口时** ,都 **会在每个请求头中自动携带该 Cookie** 。登录成功后,后端会生成一个 **Session对象** ,这个对象可以理解成就像 js 对象一样,例如: ~~~ // 该对象就是 Session对象 { SessionId: { // 用户信息 userInfo: '' } } ~~~ **Session对象** 中会 **存储有关该用户的信息** ,我们将 **SessionId** 作为 **cookie** 返回给用户,用户每次请求时 **cookie** 中会携带 **SessionId** ,我们通过 **SessionId** 可以到 **redis(内存数据库,通常Session对象会存到这里 )** 中根据 **SessionId** 去查找该 **Session对象** 中的用户信息,然后去进行 **校验用户信息以及 Cookie 是否过期来进行校验是否有权限** 等。 >[success] ## token **用户在浏览器端登录成功** 后, **服务端** 会生成一个名为 **token** 的 **加密字符串** ,这个 **加密字符串串** 是通过 **JWT** 生成的,其中包含 **用户id**以及 **token过期时间**, 然后将其通过在 **响应体** 中返回,前端接收到了 **token** 后,将其存储到本地的 **LocalStorage或SessionStorage** 中,后续在每次请求时,在前端的**axios 请求拦截器** 中从 **LocalStorage或SessionStorage** 中取出,然后放到 **请求头** 中,这样在每次请求时**请求头** 中就会携带 **token** 了,然后 **服务端接收到了token后,会去通过密钥校验token的合法性,如果校验成功,就从token中获取用户id等信息,然后根据用户id去数据库查询用户名、角色信息等,根据业务需求做进一步的校验或控制** , 如果 **Token过期或不合法,服务器拒绝请求,客户端需要重新登录获取新的Token。**