[英]Restrict concurrent login - ASP.NET Identity
我试图只允许一个用户帐户同时登录一次。
例如,用户通过计算机上的浏览器登录,现在,由于他们已经登录,因此无法在手机上同时登录。
我可以向用户实体添加bool属性,当用户登录和注销时可以更新该属性。
但是,我在身份验证cookie上使用了SlidingExpiration,因此,当cookie过期时,它不会更新我的用户属性,说他们现在已注销。
ExpireTimeSpan = <time period>,
SlidingExpiration = true,
有没有更好的方法来限制并发登录?
谢谢
您可以在登录时生成令牌并将其存储在数据库中吗?
然后,每次检查令牌是否与用户提供的令牌匹配。
如果他确实登录另一台设备,则令牌将被覆盖并且与第一个令牌不匹配,因此第一个会话将变为无效。
编辑:
正如您在评论中要求的那样,它不会阻止用户同时在另一台设备上执行第二次登录,它只会使以前的会话无效。
避免再次登录需要更多工作,并且不如上面显示的方法安全。
想象一下,用户关闭浏览器而不执行注销...它将阻止会话。
所需的近似值是将time参数添加到登录中(也将其添加到数据库中,并根据每个用户的操作更新该字段)。
如果令牌不匹配并且时间跨度不够(即5分钟),则显示消息“您无法两次登录”。 但是在我的示例中,如果令牌仍然更改,则需要显示“您的会话已过期”。
“这个想法很简单,每次用户登录时都必须生成随机令牌,然后应该将该令牌保存在数据库中以及会话中,或者如果您使用的是Microsoft表单身份验证,则可以将其保存在故障单中,然后每次用户请求一个页面,您将检查会话令牌是否与数据库令牌相同(如果没有将其踢出局!”)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.