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