美文网首页
token/session/cookie的区别

token/session/cookie的区别

作者: Mcyboy007 | 来源:发表于2017-03-06 21:54 被阅读0次

    1.简单介绍

    session(会话):

    当用户打开某个web应用时,便与web服务器产生一次session。服务器为了区分当前给自己发请求的是谁,给每个客户端分配了一个不同的“身份标识”。客户端发请求时需要携带该“身份标识”。“身份标识”的存储方式很多,通常使用cookie。
    服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

    cookie:

    cookie是浏览器里面能永久存储的一种数据。
    cookie由服务器生成,发送给浏览器,浏览器把cookie以key-value形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

    token(令牌):

    token是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库

    2.传统身份验证

    HTTP是一种没有状态的协议,并不知道谁是访问者。假设一个客户端访问服务端时发送账号密码,通过验证。下回它再次访问时,还是需要验证。
    解决办法(session+cookie):
    1)客户端访问时,通过了验证。
    2)服务端生成一条记录,记录一些必要信息。
    3)把记录这些信息的ID号发送给客户端
    4)客户端收到ID号后存储在cookie中
    5)下次客户端重新访问服务端时,带上cookie信息
    6)服务端验证cookie里面的信息,如果能找到对应的记录,则用户通过了验证

    3.token身份验证

    1)客户端使用账号密码请求登录
    2)服务端收到请求,验证账号密码
    3)验证通过,服务端签发一个token给客户端
    4)客户端收到token存储起来(例:存在cookie)
    5)客户端每次请求服务端时带着服务端签发的token
    6)服务端收到请求,验证token。验证成功则返回数据给客户端

    4.常见问题

    1.服务器上的token存储到数据库中,每次查询会不会很费时?

    如果存储到数据库中会造成系统的性能问题,可以放在内存中

    2.客户端得到的token需要如何处理?

    i.在存储的时候把token对称加密
    ii.将请求url、时间戳、token三者合并加盐签名,服务器验证有效性

    相关文章

      网友评论

          本文标题:token/session/cookie的区别

          本文链接:https://www.haomeiwen.com/subject/ueougttx.html