• 请不要在回答技术问题时复制粘贴 AI 生成的内容
daijinming
V2EX  ›  程序员

探讨一个用户登录会话保存方案

  •  
  •   daijinming · Jun 18, 2019 · 3446 views
    This topic created in 2537 days ago, the information mentioned may be changed or developed.

    在 MVC 后台渲染的场景,我采用后台 session 存储用户会话,在前后台分离的场景中,一般都是前后台分别部署,需要跨域,一般通过 JWT 存储用户信息。最近在处理一种情况,dotnet + spa ( angular ) ,前后台一起开发,部署在一起,不用跨域,所以想和大家探讨下,如果你来设计这个方案,你觉得如何存储用户会话好些,后台 session 亦或是 jwt 前台存储,或是其他

    22 replies    2019-06-21 09:15:00 +08:00
    Carseason
        1
    Carseason  
       Jun 18, 2019 via iPhone
    jwt 就可以了,以后扩展方便
    wenzhoou
        2
    wenzhoou  
       Jun 18, 2019 via Android
    英语 session===汉语的会话
    daijinming
        3
    daijinming  
    OP
       Jun 18, 2019
    @wenzhoou 我说的 session 是 技术范畴的,所以用英语区分
    wenzhoou
        4
    wenzhoou  
       Jun 18, 2019 via Android
    你打算新造一个词吗?说说你的 session 的内涵和外延。说说你的会话的内涵和外延。
    daijinming
        5
    daijinming  
    OP
       Jun 18, 2019
    @wenzhoou 我仅仅指的是 asp.net 中的 session 对象,代表用户登录的会话状态的对象
    gxm44
        6
    gxm44  
       Jun 18, 2019
    主要看 Web App 的架构与业务需求吧,JWT 无状态,分布式,sso 会省心一点,而且 server 端不需要维护 session,资源使用少。直接用 server 端的 session,简单快捷。
    daijinming
        7
    daijinming  
    OP
       Jun 18, 2019
    @gxm44 如果设计业务系统的话,我会采用成熟的 identityserver4,这次只是开发一个小工具类的网站
    daijinming
        8
    daijinming  
    OP
       Jun 18, 2019
    @gxm44 之前如果都是 MVC 我就不犹豫了,现在采用 SPA 做前台,确实有点让人犹豫
    wenzhoou
        9
    wenzhoou  
       Jun 18, 2019 via Android   ❤️ 1
    无状态 JWT:JWT 中存储所有认证授权信息,服务端不存储任何相关数据。
    有状态 JWT:JWT 中存储认证授权信息的 ID,具体数据存储在服务端。
    Session / Cookie:传统的 Session / Cookie 存储方式,有几种实现形式:
    签名的 Cookie 中直接存储 Session 信息,服务端不存储 Session 信息(与无状态 JWT 类似)
    签名的 Cookie 中存储 Session ID,服务端存储 Session 信息(与有状态 JWT 类似)
    Vegetable
        10
    Vegetable  
       Jun 18, 2019
    传统基于 cookie 的有状态的 session,许人都说其实本身是很好的方案,但是现实就是,jwt 理解起来更简单,适应的范围更广,导致我现在做什么带登录的都直接走 jwt,根本不去考虑别的方案,哪怕不是最优的选择,对开发团队来说也是最熟悉的.
    daijinming
        11
    daijinming  
    OP
       Jun 18, 2019
    @wenzhoou Cookie 过期的话,浏览器会不会自动删除
    di1012
        12
    di1012  
       Jun 18, 2019
    可以考虑在数据库中存储 session,这样就不用考虑丢失和跨域的问题了
    gxm44
        13
    gxm44  
       Jun 18, 2019
    @daijinming 我做的 SPA 都是把 JWT 扔 Cookie 里的,我觉得吧楼主的 case,用自己最熟的,肯定没问题。
    wenzhoou
        14
    wenzhoou  
       Jun 18, 2019 via Android
    @daijinming 可是反过来说,服务器端不能控制 jwt 前台存储时的生命周期啊。
    wenzhoou
        15
    wenzhoou  
       Jun 18, 2019 via Android
    所以我觉得不跨域的 spa,用哪种都行啊。或者你应该考虑别的方面吧。
    1010543618
        16
    1010543618  
       Jun 18, 2019
    不是特别懂,感觉 jwt + 微服务前后端都很爽
    x2016
        17
    x2016  
       Jun 19, 2019
    JWT
    x2016
        18
    x2016  
       Jun 19, 2019
    用 Redis 存
    kcer
        19
    kcer  
       Jun 19, 2019
    jwt + Redis
    thinkif
        20
    thinkif  
       Jun 21, 2019
    不跨域的话,也不扩展多端的情况下,session 应该是最简单的,这也可能是你在它与 JWT 之间犹豫的地方
    daijinming
        21
    daijinming  
    OP
       Jun 21, 2019
    @thinkif 主要前台还是 angularjs,总觉得不是一个时代的产物
    thinkif
        22
    thinkif  
       Jun 21, 2019
    @daijinming #21
    话虽如此,但其实跟前端关系并不大,鉴权都在 API 中做,前端只需要根据 API 返回的内容(包括路由等)做好处理即可
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2638 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 80ms · UTC 15:17 · PVG 23:17 · LAX 08:17 · JFK 11:17
    ♥ Do have faith in what you're doing.