限制并发登录 - ASP.NET标识

时间:2014-05-23 10:55:23

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

我尝试只允许用户帐户登录,只能同时登录一次。

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

我可以将bool属性添加到我的用户实体,我可以在用户登录并注销时更新。

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

ExpireTimeSpan = <time period>,
SlidingExpiration = true,

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

由于

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

&#34;每次登录用户必须生成随机令牌时,这个想法非常简单,那么您应该将该令牌保存在数据库和会话中,或者如果您使用的是Microsoft表单身份验证,则可以将其保存在票证,然后每次用户请求一个页面,你将检查会话令牌是否与数据库令牌相同,如果没有踢他!&#34;

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