C# 在asp.net mvc 4.0中,如何将相同用户名和密码的用户限制为来自两个系统/浏览器的逻辑?

C# 在asp.net mvc 4.0中,如何将相同用户名和密码的用户限制为来自两个系统/浏览器的逻辑?,c#,asp.net-mvc,security,C#,Asp.net Mvc,Security,我已经创建了一个asp.net mvc4网站。我还实现了表单身份验证。 在此网站中,我希望同时阻止对我的网站客户端的访问(如果我网站的客户端已在计算机中打开其帐户,则该客户端无法在同一时间在其他计算机或同一系统的任何其他浏览器中打开同一网站) 我想为用户提供一个付费服务,我不希望他只与许多人共享他的用户名和密码,同时使用我的服务而不付费。请尽快帮助我 我如何实现这一点。我是否需要在数据库中维护一些登录信息,或者是否有任何内置工具可用于此操作。此功能不是内置的 我会在“User”表中添加一个“Is

我已经创建了一个asp.net mvc4网站。我还实现了表单身份验证。 在此网站中,我希望同时阻止对我的网站客户端的访问(如果我网站的客户端已在计算机中打开其帐户,则该客户端无法在同一时间在其他计算机或同一系统的任何其他浏览器中打开同一网站)


我想为用户提供一个付费服务,我不希望他只与许多人共享他的用户名和密码,同时使用我的服务而不付费。请尽快帮助我


我如何实现这一点。我是否需要在数据库中维护一些登录信息,或者是否有任何内置工具可用于此操作。

此功能不是内置的

我会在“User”表中添加一个“IsLoggedIn”位列。然后,您可以检查此列,查看是否应允许用户进入


问题在于知道何时该标志应设置为false。如果用户单击“注销”或在“会话结束”事件中,很容易将标志设置为false,但我认为您会遇到这样做不够好的情况。例如,如果用户从笔记本电脑登录,而笔记本电脑的电池出现故障,您将不会从客户端收到任何用户已离开的通知…

此功能不是内置的

我会在“User”表中添加一个“IsLoggedIn”位列。然后,您可以检查此列,查看是否应允许用户进入


问题在于知道何时该标志应设置为false。如果用户单击“注销”或在“会话结束”事件中,很容易将标志设置为false,但我认为您会遇到这样做不够好的情况。例如,如果用户从笔记本电脑登录,而笔记本电脑的电池出现故障,您将不会从客户端收到任何用户已离开的通知…

据我所知,没有内置功能,但您可以实现自己版本的

成功登录后,需要将的值存储在数据库中,并将其与用户记录关联

在每次页面加载时,您都需要根据该用户的数据库记录检查票证的值。如果不匹配,用户将被注销


如果用户A和用户B使用相同的凭据,用户A已登录,如果用户B随后登录,则使用此方法将使用户A的会话无效,并且他们将无法同时查看内容。您还可以在覆盖会话时记录活动,以及IP地址和用户代理,以帮助您识别共享帐户详细信息的用户。

据我所知,没有内置内容,但您可以实现自己版本的

成功登录后,需要将的值存储在数据库中,并将其与用户记录关联

在每次页面加载时,您都需要根据该用户的数据库记录检查票证的值。如果不匹配,用户将被注销


如果用户A和用户B使用相同的凭据,用户A已登录,如果用户B随后登录,则使用此方法将使用户A的会话无效,并且他们将无法同时查看内容。您还可以在覆盖会话时记录活动,以及IP地址和用户代理,以帮助您识别共享帐户详细信息的用户。

我认为David已经给出了大部分想法(+1),但是对于关闭浏览器而不注销等问题,您可以在
窗口中处理。unload()
用于在表中设置标志的事件

我认为David已经给出了大部分想法(+1),但是对于关闭浏览器而不注销等问题,您可以在
window.unload()
事件中处理,以设置表中的标志

若用户只关闭浏览器而不单击“注销”按钮,我如何更改表中的该字段?如何应对这种情况?我想为用户提供一个付费服务,我不希望他只与许多人共享用户名和密码,同时使用我的服务而不付费。请尽快帮助我。我认为使用此解决方案,您将最终遇到大量被锁定的用户-您需要允许用户再次登录并使其上一个会话无效,而不是阻止他们创建新会话。如果用户只关闭浏览器而不单击“注销”按钮,我如何更改表中的该字段?如何应对这种情况?我想为用户提供一个付费服务,我不希望他只与许多人共享用户名和密码,同时使用我的服务而不付费。请尽快帮助我。我认为,使用此解决方案,您最终将拥有大量被锁定的用户-您需要允许用户再次登录并使其上一个会话无效,而不是阻止他们创建新会话。这将是非常偶然的,因为您仅限于被阻止的弹出窗口,或者在浏览器导航离开之前不能保证执行的AJAX请求。这将是非常偶然的,因为您仅限于弹出窗口被阻止,或者在浏览器导航离开之前不能保证执行的AJAX请求。@Silverfox在每次加载页面时,这不会增加服务器访问次数吗?@SurajSingh是的,如果您使用数据库,则需要对每个页面加载进行查询。理想情况下,无论如何都应该验证令牌,否则被另一个会话更改了密码的用户将保持登录状态(如果您的帐户已被泄露,并且您希望确保您的帐户现在是安全的,则不太好)。这当然是sec的一种权衡