如何限制Web应用程序的用户数量。
您可能希望将网络应用限制为一次只处理20个用户。我们公司根据许多许可证销售应用程序,但我们不确定Web应用程序中的行为。
我看到一些建议说您可以在用户登录时将用户帐户标记为“LoggedIn = True”。然后,每次新的成功登录尝试都会检查“LoggedIn = True”记录的数量。如果超出限制,则拒绝用户。
在这种情况下如何处理意外输入?如果:
以上所有内容仍然会设置“LoggedIn = True”标志,并有助于登录用户的数量。这可能会无意中阻止原始身份验证的用户。
如果可能的话,我正在寻找更多的ASP.NET解决方案。
答案 0 :(得分:4)
假设您的用户身份验证是以某种方式基于会话的,那么所有“意外”情况的答案(实际上这将是常态 - 人们似乎很少注销Web应用程序)将是那些用户插槽在会话超时。因此,您需要调查应用程序的使用模式。如果你有很多人登录几分钟,但不超过这个,那么30分钟的会话超时意味着很少有人真正开始使用该应用程序。
基本问题是Web应用程序本质上是断开连接的,因此您无法监视用户在页面请求之间实际执行的操作。通常,您会为特定用户出售此类应用程序的许可证(因此,如果公司购买了20个许可证,则会为其提供20个用户名和密码)。然后你可以通过相同的用户名和密码防止多次登录,拒绝第二次登录或停用前一次登录(这可能是更好的方法,以防有人真正从一台机器移动到另一台机器而没有注销其中一台机器你概述的原因。)
答案 1 :(得分:1)
最常见的解决方案是拥有一个活动计时器。您可以假设活跃用户将在“X”时间内至少发出一个请求 - 比如说5分钟左右。
您可以通过在页面加载时启动的计时器触发ajax样式的异步请求来强制执行此操作。例如,如果您假设所有活跃用户每 5 分钟至少发出一个请求,那么每个页面将每 4 > 强>分钟。这样,只要他们打开浏览器窗口,您将始终拥有该用户的活动。同样,这是由异步请求处理的,而不是由任何类型的reload指令处理。这使得它对用户绝对透明。
作为一个额外的好处,看看你是否可以让ajax请求提取一些有用的信息,而不仅仅是强制执行许可限制。
答案 2 :(得分:0)
正如David所指出的,主要问题是区分空闲用户和已离开应用程序的用户。
一种可能的解决方案是保持较低的会话超时(比如1或2分钟)并使用回调函数来保持空闲用户的会话活动。然后,您可以在Session_Start中递增计数器并在Session_End中递减它,并使用它来跟踪活动会话的数量。如果活动会话数超出限制,您可以将新用户重定向到放弃会话的页面,并告诉用户此刻您有太多访问者。