Token,Cookie,Session 小结

喜欢而已 提交于 2020-10-02 00:37:17

Token
是服务端根据用户帐号用一定的算法及加密生成的一串字符串,作为客户端用户请求的令牌,是用户的标识。token可以存在cookie或其他地方。
token 验证主要是指 token 存储在 Authorization Header 中进行的验证。
验证流程:


  • 用户输入登录信息
  • 服务器判断登录信息正确,返回一个 token
  • token 存储在客户端,大多数通常在 local storage,但是也可以存储在 session storage 或者 cookie 中。
  • 接着发起请求的时候将 token 放进 Authorization header,或者同样可以通过上面的方式。
  • 服务器端解码 JWT 然后验证 token,如果 token 有效,则处理该请求。
  • 一旦用户登出,token 在客户端被销毁,不需要经过服务器端。

Session
Session是会话,在服务端存储,有默认过期时间,与浏览器是否关闭无关,服务器使用Seesion把用户信息临时保存在服务器上,文件,数据库等都可以
Session的验证需要cookie带一个字段来

Cookie
Cookie在客户端的头信息中,是一堆key和value的文本。
cookie 验证准确的说是利用 cookie 来作为媒介,存储 session ID 进行验证,是一堆key和value
传统 cookie 会话的验证流程:


  • 用户登录,输入账号密码
  • 服务器验证用户账号密码正确,创建一个 session 存储在数据库(或者 redis)
  • 将 session ID 放进 cookie 中,被存储在用户浏览器中。
  • 再次发起请求,服务器直接通过 session ID 对用户进行验证
  • 一旦用户登出,则 session 在客户端和服务器端都被销毁

Token验证的优势

  1. 无状态
    token 验证是无状态的,服务器不记录哪些用户登录了或者哪些 JWT 被发布了,而是每个请求都带上了服务器需要验证的 token,所以后端不需要保持对token的记录。Token是用CPU的计算时间换取了Session的存储空间。
  2. 跨域
    cookie 能很好的处理单域和子域,但是遇到跨域的问题就会变得难以处理。
    跨域?
    https://blog.csdn.net/qq_38128179/article/details/84956552
    https://segmentfault.com/a/1190000015597029



  3. 在JWT(JSON web Token)中存储数据 https://www.jianshu.com/p/576dbf44b2ae
    https://www.jianshu.com/p/8f7009456abc
    在Cookie中只能拿到sessionid,假如要判断用户角色则除了验证sessionid是否有效外,还要获取校验用户权限,使用JWT可以一并将用户角色放入JWT,只需要验证JWT内容

  4. 移动平台
    原生移动平台并不一定和 cookie 能良好的兼容,在使用中会存在一些限制和需要注意的地方。另一方面,token 更容易在 IOS 和 Android 上实现

共同的问题

  1. JWT的大小
    token最大的缺点就是它的大小,最小的它都比cookie要大,请求需带着token影响请求速度
  2. 哪里存储 token
  3. XSS 和 XSRF 防护

Token的生成方式
https://www.jianshu.com/p/c33f5777c2eb

参考:
https://www.jianshu.com/p/c33f5777c2eb
https://www.cnblogs.com/moyand/p/9047978.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!