美文网首页
JWT和Session方式存储id的差异

JWT和Session方式存储id的差异

作者: huxi_59d9 | 来源:发表于2018-02-12 15:22 被阅读0次

    JWT和Session方式存储id的差异

    1.极大缓解服务器的内存压力

    Session方式存储用户id的最大弊病在于要占用大量服务器内存,对于较大型应用而言可能还要保存许多的状态。一般而言,大型应用还需要借助一些KV数据库和一系列缓存机制来实现Session的存储。

    而JWT方式将用户状态分散到了客户端中,可以明显减轻服务端的内存压力。除了用户id之外,还可以存储其他的和用户相关的信息,例如该用户是否是管理员、用户所在的分桶(见[《你所应该知道的A/B测试基础》一文](/2015/08/27/introduction-to-ab-testing/)等。

    虽说JWT方式让服务器有一些计算压力(例如加密、编码和解码),但是这些压力相比磁盘I/O而言或许是半斤八两。具体是否采用,需要在不同场景下用数据说话。

    2.单点登录 用户状态同步 变得简单

    Session方式来存储用户id,一开始用户的Session只会存储在一台服务器上。对于有多个子域名的站点,每个子域名至少会对应一台不同的服务器,例如:

       www.taobao.com

    nv.taobao.com

    nz.taobao.com

    login.taobao.com

    所以如果要实现在login.taobao.com登录后,在其他的子域名下依然可以取到Session,这要求我们在多台服务器上同步Session。

    使用JWT的方式则没有这个问题的存在,因为用户的状态已经被传送到了客户端。因此,我们只需要将含有JWT的Cookie的domain设置为顶级域名即可,例如

    1Set-Cookie: jwt=lll.zzz.xxx; HttpOnly;max-age=980000; domain=.taobao.com

    注意domain必须设置为一个点加顶级域名,即.taobao.com。这样,taobao.com和*.taobao.com就都可以接受到这个Cookie,并获取JWT了。

    相关文章

      网友评论

          本文标题:JWT和Session方式存储id的差异

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