V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
daijinming
V2EX  ›  程序员

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

  •  
  •   daijinming · 2019-06-18 16:59:28 +08:00 · 2623 次点击
    这是一个创建于 1980 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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