我创建了一个 asp.net mvc4 网站。我也实现了表单身份验证。在此网站中,我想同时阻止对我的网站客户端的访问(如果我的网站的客户已经在计算机上打开了他或她的帐户,那么该客户将无法获得在同时在其他计算机或同一系统的任何其他浏览器中)。
我想为用户提供一项付费服务,我不希望他只与许多人共享他的用户名和密码以同时使用我的服务而无需付费。请尽快帮助我
我该如何实现这一点。我是否需要在数据库中维护一些登录信息,或者是否有任何内置工具可用于此。
我创建了一个 asp.net mvc4 网站。我也实现了表单身份验证。在此网站中,我想同时阻止对我的网站客户端的访问(如果我的网站的客户已经在计算机上打开了他或她的帐户,那么该客户将无法获得在同时在其他计算机或同一系统的任何其他浏览器中)。
我想为用户提供一项付费服务,我不希望他只与许多人共享他的用户名和密码以同时使用我的服务而无需付费。请尽快帮助我
我该如何实现这一点。我是否需要在数据库中维护一些登录信息,或者是否有任何内置工具可用于此。
据我所知,没有内置任何内容,但您可以实现自己的ASP.NET 授权提供程序版本。
成功登录后,您需要将FormsAuthenticationTicket的值存储在数据库中并将其与您的用户记录相关联。
在每次页面加载时,您都需要根据该用户的数据库记录检查票证的价值。如果不匹配,用户将被注销。
如果用户 A 和用户 B 使用相同的凭据,则使用此方法,用户 A 已登录,如果用户 B 随后登录,它将使用户 A 的会话无效,他们将无法同时查看内容。您还可以在会话被覆盖时记录活动,以及 IP 地址和用户代理,以帮助您识别正在共享帐户详细信息的用户。
此功能不是内置的。
我会在我的“用户”表中添加一个“IsLoggedIn”位列。然后您可以检查此列以查看是否应允许用户进入。
问题是要知道什么时候该标志应该设置为假。如果用户单击“注销”或在“会话结束”事件中,将标志设置为 false 很容易,但我认为您会遇到不够好的情况。例如,如果用户从笔记本电脑登录并且笔记本电脑的电池出现故障,您将不会从客户端收到任何用户离开的通知......
我认为大卫已经给出了大部分想法(+1),但是对于关闭浏览器而不注销等问题,您可以在window.unload()
事件中处理它以在表中设置标志。