我试图只允许一个用户帐户登录,并且同一时间只能登录一次。
例如用户通过计算机上的浏览器登录,现在他们无法在手机上同时登录,因为他们已经登录了。
我可以向我的用户实体添加一个 bool 属性,我可以在用户登录和注销时更新该属性。
但是,我在身份验证 cookie 上使用 SlidingExpiration,因此当 cookie 过期时,它不会更新我的用户属性来表明他们现在已注销。
ExpireTimeSpan = <time period>,
SlidingExpiration = true,
有没有更好的方法来限制并发登录?
谢谢
最佳答案
您可以在登录时生成 token 并将其存储在数据库中吗?
然后,每次检查 token 是否与用户提供的 token 匹配。
如果他确实在其他设备上登录, token 将被覆盖,并且不会与第一个设备匹配,因此第一个 session 将失效。
编辑:
正如您在评论中所询问的那样,它不会阻止用户同时在另一台设备中执行第二次登录,它只会使之前的 session 失效。
避免二次登录需要更多工作,而且不如上面所示的方法安全。
想象一下,用户关闭浏览器而不执行注销...它将阻止 session 。
您想要的近似值是将时间参数添加到您的登录中(也将其添加到数据库中,并根据每个用户的操作更新该字段)。
如果 token 不匹配且时间跨度不够(即5分钟),则显示“您无法登录两次”的消息。但在我的示例中,如果 token 已更改,您需要显示“您的 session 已过期”。
关于c# - 限制并发登录 - ASP.NET Identity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23827352/