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