Asp.Net Core:用户会话管理系统

时间:2018-08-19 18:29:00

标签: c# asp.net session asp.net-core

我目前正在尝试为用户设置会话管理界面,以从根本上注销他们可能在其他设备上处于活动状态的会话。但是,我仍然对Asp.Net Core 2.1还是有些陌生,并且在查找有关此主题的好的文档时遇到了麻烦。

我考虑过使用分布式SQL Server缓存系统。但是,在进一步检查之后,我发现分布式缓存的键与会话ID不相等,因为不应该这样。

我还尝试编写一些将会话ID存储在与用户表多对一关系的单独表中的中间件。该表将具有滑动到期日期和令牌。如果该会话具有令牌,则该会话将被持久化。我的想法是使用cookie将令牌分配给客户端。这样,如果他们的会话过期,它将使用cookie令牌查找该会话,如果存在,则登录相应的用户。然后它将复制该令牌并删除旧会话。有点像“记住我”系统。如果令牌为空并且会话时间已过期,则将其丢弃。如果未找到会话,或者用户字段为null,它将注销用户。如果找到重复的令牌,它将注销所有具有相应令牌的会话。但是,我宁愿使用某种内置功能(如果存在)来最大程度地减少打开不需要的安全漏洞的风险。

我还找到了一些示例,您可以在其中注销另一个用户...但是,由于Asp.Net Identity是基于cookie的,因此它使用户可以继续使用该网站,直到cookie过期为止...在这种情况下是不可取的。

我知道Asp.Net具有IHttpSessionState,但是我一直无法在Core中找到类似的接口。不幸的是,我发现的大多数解决方案要么指向实现定制系统,要么只是显示如何注销当前会话。

基本上,Asp.Net Core中已经存在某种已经实现了这种功能的机制?如果没有,我应该研究并尝试实现任何特定的接口吗?如果没有,我是否应该编写自己的系统?如果是这样,我上面的逻辑中是否有任何漏洞?

这是我正在谈论的一个示例,该示例来自Facebook的帐户管理。我知道这是一个范围更大的网站,但是我认为这样的功能很难集成吗?可能是错的...

(删除了一些个人信息) enter image description here

0 个答案:

没有答案