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

C# 限制并发登录-ASP.NET标识,c#,asp.net,asp.net-mvc,asp.net-identity,C#,Asp.net,Asp.net Mvc,Asp.net Identity,我正在尝试只允许用户帐户登录,同时只允许登录一次 例如,用户通过其计算机上的浏览器登录,现在他们无法在手机上同时登录,因为他们已经登录 我可以将bool属性添加到我的用户实体中,在用户登录和注销时可以更新该属性 但是,我在身份验证cookie上使用了SlidingExpiration,因此当cookie过期时,它不会更新我的用户属性以表示他们现在已注销 ExpireTimeSpan = <time period>, SlidingExpiration = true, ExpireT

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

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

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

但是,我在身份验证cookie上使用了SlidingExpiration,因此当cookie过期时,它不会更新我的用户属性以表示他们现在已注销

ExpireTimeSpan = <time period>,
SlidingExpiration = true,
ExpireTimeSpan=,
slidengexpiration=true,
有没有更好的方法来限制并发登录


谢谢

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

编辑:
正如您在评论中所问,它不会阻止用户同时在另一台设备上执行第二次登录,它只会使以前的会话无效。
避免第二次登录需要更多的作业,并且不像上面所示的方法那样安全。
假设用户关闭浏览器而不执行注销。。。它将阻止会话。
您所需的近似值是将时间参数添加到您的登录中(也将其添加到数据库中,并在每个用户的操作中更新字段)。

如果令牌不匹配且时间跨度不够长(即5分钟),则显示消息“您不能登录两次”。但在我的示例中,如果令牌已更改,则需要显示“您的会话已过期”。

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

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

“这个想法非常简单,每次用户登录时,您都必须生成随机令牌,然后您应该将该令牌保存在数据库和会话中,或者如果您使用的是Microsoft form authentication,您可以将其保存在票据中,然后每次用户请求页面时,您都会检查会话令牌是否与数据库令牌相同,如果你不把他踢出去!"

“这个想法非常简单,每次用户登录时,您都必须生成随机令牌,然后您应该将该令牌保存在数据库和会话中,或者如果您使用的是Microsoft form authentication,您可以将其保存在票据中,然后每次用户请求页面时,您都会检查会话令牌是否与数据库令牌相同,如果你不把他踢出去!"


您可以尝试在
会话结束
方法的
全局.asax
中添加此逻辑(并将其保存到数据库中)。听起来很简单,但“正在登录”“在无状态环境中定义并不容易。我将批判性地检查导致这一要求的思想链。实现此功能后,您可能会再次删除它。仅仅因为它不是为了保存状态而设计的,并不意味着您不应该以这种方式使用它。系统上并发用户的数量最终会受到限制。因此,为了防止一个帐户被多人使用,这是必需的。您可以尝试在
会话结束
方法的
全局.asax
中添加此逻辑(并将其保存到数据库)。听起来很简单,但在无状态环境中定义“登录”并不容易。我将批判性地检查导致这一要求的思想链。实现此功能后,您可能会再次删除它。仅仅因为它不是为了保存状态而设计的,并不意味着您不应该以这种方式使用它。系统上并发用户的数量最终会受到限制。因此,为了防止一个帐户被多人使用,需要这样做。使用这种方法意味着第二次尝试登录吗?我想显示一个页面,上面写着“此帐户已登录”,而不是现在阻止第一次登录。这种方法只需告诉您,如果同一帐户多次登录,您如何处理该信息取决于您。使用这种方法意味着第二次尝试登录吗?我想显示一个页面,上面写着“此帐户已登录”,而不是现在阻止第一次登录。这种方法只需告诉您,如果同一帐户登录了不止一次,您如何处理该信息取决于您。还有一个字段用于此开箱即用。我不认为它在V1中使用。也有一个字段用于此开箱即用。我不认为它在V1中使用。