c# - 限制并发登录 - ASP.NET Identity

标签 c# asp.net asp.net-mvc asp.net-identity

我试图只允许一个用户帐户登录,并且同一时间只能登录一次。

例如用户通过计算机上的浏览器登录,现在他们无法在手机上同时登录,因为他们已经登录了。

我可以向我的用户实体添加一个 bool 属性,我可以在用户登录和注销时更新该属性。

但是,我在身份验证 cookie 上使用 SlidingExpiration,因此当 cookie 过期时,它不会更新我的用户属性来表明他们现在已注销。

ExpireTimeSpan = <time period>,
SlidingExpiration = true,

有没有更好的方法来限制并发登录?

谢谢

最佳答案

您可以在登录时生成 token 并将其存储在数据库中吗?
然后,每次检查 token 是否与用户提供的 token 匹配。
如果他确实在其他设备上登录, token 将被覆盖,并且不会与第一个设备匹配,因此第一个 session 将失效。

编辑:
正如您在评论中所询问的那样,它不会阻止用户同时在另一台设备中执行第二次登录,它只会使之前的 session 失效。
避免二次登录需要更多工作,而且不如上面所示的方法安全。
想象一下,用户关闭浏览器而不执行注销...它将阻止 session 。
您想要的近似值是将时间参数添加到您的登录中(也将其添加到数据库中,并根据每个用户的操作更新该字段)。
如果 token 不匹配且时间跨度不够(即5分钟),则显示“您无法登录两次”的消息。但在我的示例中,如果 token 已更改,您需要显示“您的 session 已过期”。

关于c# - 限制并发登录 - ASP.NET Identity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23827352/

相关文章:

c# - ToDouble() 不工作?

c# - 如何禁用从一种类型的多个实例订阅事件并只允许一个?

c# - 创建多语言网站我应该知道和考虑什么

asp.net-mvc - 当它由@Html 助手生成时,如何在 MVC 中更改 'data-val-number' 消息验证

asp.net-mvc - 通过 Gitignore 递归包含 Nuget DLL

c# - 按多个字段订购列表 (C#)?

c# - 访问 LTO 磁带内存的源代码 (C/C#)

javascript - 如何使用 javascript 获取下拉选择的值?

javascript - jQuery 数据表 ASP.NET 问题

asp.net-mvc - ASP.NET MVC 问题和经验教训