V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vevlins
V2EX  ›  前端开发

cookie、session、token 的三个问题

  •  
  •   vevlins · 2017-12-24 21:17:21 +08:00 · 1847 次点击
    这是一个创建于 2558 天前的主题,其中的信息可能已经有所发展或是发生改变。

    三个问题:

    1.cookie 与 session 相比真的存在安全性上的不同吗? 我最初的理解是因为后端要根据 cookie 得到确切的用户是谁,所以即使编码也可以解码出来,必定要暴露一定的信息.而且可以被修改成其他用户. 但是同学给我说了一个奇怪的例子,把 cookie 设定为 username+md5(pwd),后端拿到做一个简单的验证,这样的话就避免了窜改的可能性.如果这样做还有什么安全性的区别嘛,尽管这样还是会暴露一个 username,但是似乎也没什么问题吧?

    2.session 与 cookie 的根本区别是什么呢? 延伸第一个问题,如果 cookie 里边存储的一个没有实际意义的字符串 flag,但是后端 user 表里有着一个字段 flag,能根据它取出用户,这种方式已经算是 session 了吗?session 与 cookie 的区别是从前端还是后端判定身份还是在后端有一个 session 管理,能够存储更多的复杂结构的额外信息呢?

    2.sessionid 和 token 的区别是什么呢? 感觉都是编码后的字符串,后端解码出来然后判定用户和权限.我看的有的文章说 token 主要不是用来鉴权,而是存储一些基本信息.这种说法合理吗?他们的根本区别是什么呢?

    RH
        1
    RH  
       2017-12-24 23:25:19 +08:00 via iPhone   ❤️ 1
    HTTP 请求本是无状态的,即前后两次请求没有上下文关系。但是作为服务,有需要关联请求的业务,因此就衍生了 session 这个概念,来保持客户端与服务端的会话关系。

    一般 session 会在服务端记录数据,下发给客户端一个 token,下次请求时客户端携带上 token,服务端就可以找到关联的会话数据,这样来关联不同请求。

    如果客户端是浏览器,常规做法是利用 cookie 来记录 token,因为这样浏览器每次请求都会根据下发 token 时 cookie 的配置将 token 写入请求中,客户端就不用特意再去处理发送 token 到服务端的问题了。如果是移动端,一般都是需要手动接受服务端下发的 token,每次请求按与服务端的协议写入请求。

    另外为了安全,有可能为了方便记录一些其他用户信息,比如展示用的用户名等,但一般 cookie 中只以 token 为当前用户的唯一凭证。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 06:18 · PVG 14:18 · LAX 22:18 · JFK 01:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.