我尝试只允许用户帐户登录,只能同时登录一次。
E.g。用户通过计算机上的浏览器登录,现在他们无法在手机上同时登录,因为他们已经登录。
我可以将bool属性添加到我的用户实体,我可以在用户登录并注销时更新。
但是,我在身份验证Cookie上使用SlidingExpiration,因此当Cookie过期时,它不会更新我的用户属性,说它们现在已经注销。
ExpireTimeSpan = <time period>,
SlidingExpiration = true,
有没有更好的方法来限制并发登录?
由于
答案 0 :(得分:3)
您可以在登录时生成令牌并将其存储在数据库中吗? 然后,每次检查令牌是否与用户提供的令牌匹配 如果他确实登录了其他设备,则该令牌将被覆盖并且与第一个令牌不匹配,因此第一个会话将变为无效。
编辑:
正如您在评论中提到的那样,它不会阻止用户同时在另一个设备中执行第二次登录,它只会使之前的会话无效。
避免第二次登录需要更多工作,并且不如上面显示的方法安全
想象一下,用户关闭浏览器而不执行注销...它将阻止会话
您想要的近似值是将时间参数添加到您的登录中(也将其添加到数据库中,并更新每个用户操作的字段)。
如果令牌不匹配且时间跨度不够远(即5分钟),则显示“您无法登录两次”的消息。但是在我的例子中,如果令牌已经改变,你需要显示“你的会话已过期”。
答案 1 :(得分:1)
&#34;每次登录用户必须生成随机令牌时,这个想法非常简单,那么您应该将该令牌保存在数据库和会话中,或者如果您使用的是Microsoft表单身份验证,则可以将其保存在票证,然后每次用户请求一个页面,你将检查会话令牌是否与数据库令牌相同,如果没有踢他!&#34;