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

2019-06-18 16:59:28 +08:00
 daijinming

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

2470 次点击
所在节点    程序员
22 条回复
Carseason
2019-06-18 17:24:00 +08:00
jwt 就可以了,以后扩展方便
wenzhoou
2019-06-18 17:30:55 +08:00
英语 session===汉语的会话
daijinming
2019-06-18 17:33:04 +08:00
@wenzhoou 我说的 session 是 技术范畴的,所以用英语区分
wenzhoou
2019-06-18 17:35:32 +08:00
你打算新造一个词吗?说说你的 session 的内涵和外延。说说你的会话的内涵和外延。
daijinming
2019-06-18 17:36:36 +08:00
@wenzhoou 我仅仅指的是 asp.net 中的 session 对象,代表用户登录的会话状态的对象
gxm44
2019-06-18 17:38:39 +08:00
主要看 Web App 的架构与业务需求吧,JWT 无状态,分布式,sso 会省心一点,而且 server 端不需要维护 session,资源使用少。直接用 server 端的 session,简单快捷。
daijinming
2019-06-18 17:40:47 +08:00
@gxm44 如果设计业务系统的话,我会采用成熟的 identityserver4,这次只是开发一个小工具类的网站
daijinming
2019-06-18 17:42:00 +08:00
@gxm44 之前如果都是 MVC 我就不犹豫了,现在采用 SPA 做前台,确实有点让人犹豫
wenzhoou
2019-06-18 17:44:05 +08:00
无状态 JWT:JWT 中存储所有认证授权信息,服务端不存储任何相关数据。
有状态 JWT:JWT 中存储认证授权信息的 ID,具体数据存储在服务端。
Session / Cookie:传统的 Session / Cookie 存储方式,有几种实现形式:
签名的 Cookie 中直接存储 Session 信息,服务端不存储 Session 信息(与无状态 JWT 类似)
签名的 Cookie 中存储 Session ID,服务端存储 Session 信息(与有状态 JWT 类似)
Vegetable
2019-06-18 17:48:28 +08:00
传统基于 cookie 的有状态的 session,许人都说其实本身是很好的方案,但是现实就是,jwt 理解起来更简单,适应的范围更广,导致我现在做什么带登录的都直接走 jwt,根本不去考虑别的方案,哪怕不是最优的选择,对开发团队来说也是最熟悉的.
daijinming
2019-06-18 17:48:33 +08:00
@wenzhoou Cookie 过期的话,浏览器会不会自动删除
di1012
2019-06-18 17:50:13 +08:00
可以考虑在数据库中存储 session,这样就不用考虑丢失和跨域的问题了
gxm44
2019-06-18 18:00:24 +08:00
@daijinming 我做的 SPA 都是把 JWT 扔 Cookie 里的,我觉得吧楼主的 case,用自己最熟的,肯定没问题。
wenzhoou
2019-06-18 18:06:52 +08:00
@daijinming 可是反过来说,服务器端不能控制 jwt 前台存储时的生命周期啊。
wenzhoou
2019-06-18 18:10:54 +08:00
所以我觉得不跨域的 spa,用哪种都行啊。或者你应该考虑别的方面吧。
1010543618
2019-06-18 21:02:02 +08:00
不是特别懂,感觉 jwt + 微服务前后端都很爽
x2016
2019-06-19 09:16:14 +08:00
JWT
x2016
2019-06-19 09:16:28 +08:00
用 Redis 存
kcer
2019-06-19 11:10:17 +08:00
jwt + Redis
thinkif
2019-06-21 08:53:41 +08:00
不跨域的话,也不扩展多端的情况下,session 应该是最简单的,这也可能是你在它与 JWT 之间犹豫的地方

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/575172

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX