繁体   English   中英

限制并发登录-ASP.NET身份

[英]Restrict concurrent login - ASP.NET Identity

我试图只允许一个用户帐户同时登录一次。

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

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

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

ExpireTimeSpan = <time period>,
SlidingExpiration = true,

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

谢谢

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

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

“这个想法很简单,每次用户登录时都必须生成随机令牌,然后应该将该令牌保存在数据库中以及会话中,或者如果您使用的是Microsoft表单身份验证,则可以将其保存在故障单中,然后每次用户请求一个页面,您将检查会话令牌是否与数据库令牌相同(如果没有将其踢出局!”)

http://engthunder.wordpress.com/2011/10/19/preventing-multiple-user-from-logging-in-using-the-same-username-single-user-login-at-a-time/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM