我试图只允许一个用户帐户登录,只有一次在同一时间。
。用户通过电脑上的浏览器登录,现在他们不能在手机上同时登录,因为他们已经登录了。
我可以为我的用户实体添加一个bool属性,我可以在用户登录和注销时更新。
然而,我在身份验证cookie上使用SlidingExpiration,因此,当cookie过期时,它不会更新我的用户属性,说他们现在已经注销。
ExpireTimeSpan = <time period>,
SlidingExpiration = true,
是否有更好的方法来限制并发登录?
谢谢
您可以在登录时生成令牌并将其存储在数据库中吗?
然后,每次检查令牌是否与用户提供的令牌匹配。
如果他在另一台设备上登录,令牌将被覆盖,并且与第一个令牌不匹配,因此第一个会话将无效。
编辑:
正如你在评论中所问的,它不会阻止用户同时在另一台设备上执行第二次登录,它只会使以前的会话无效。
避免第二次登录需要更多的工作,并且不像上面所示的方法那样安全。
想象一下,用户关闭了浏览器,没有执行登出操作……它将阻止会话。
您想要的近似结果是将time参数添加到登录中(也将其添加到数据库中,并在每个用户的操作上更新字段)。
然后显示"你不能登录两次"的消息,如果令牌不匹配,时间跨度不够远(即5分钟)。但是在我的例子中,如果令牌已经更改,则需要显示"您的会话过期"。
"这个想法很简单,每次用户登录时,你必须生成随机令牌,然后你应该将该令牌保存在数据库和会话中,或者如果你使用微软表单身份验证,你可以将其保存在票证中,然后每次用户请求一个页面时,你会检查会话令牌是否与数据库令牌相同,如果不是踢他出去!"
http://engthunder.wordpress.com/2011/10/19/preventing-multiple-user-from-logging-in-using-the-same-username-single-user-login-at-a-time/