2009-06-21 139 views
0

我有,我一定要限制登录的用户按以下细节的情景:如何限制用户登录?

当第500个用户尝试登录我的网站会出现一个消息“用户登录超过,请稍后登录! “

一次只能登录499个用户,第500个用户是管理员。还需要在管理员页面视图中显示在线用户。那么,如何计算用户的登录,并限制人数高达500

请提供有关aps.net答案C#

+1

你在这里有一个global.asax作为标记,所以你可能知道Session_Start和Session_End,那么这有什么问题?使用这些事件不应该太难实现。你能否提供更多的细节? – Kobi 2009-06-21 11:18:28

+0

但是,无论何时用户关闭浏览器,都不会遇到Session_End事件。 – 2009-06-21 11:21:19

回答

0

在PHP中,你会通过更改会话的行为,以便它们存储做到这一点在DB中。通过这种方式,您可以对有多少人登录进行大致计数。

我假设有一种方法可以在ASP中执行此操作。

0

如果你有一个很好的表演RDBMS(和良好的网络),你可以在表格中登记的信息......但如果这是昂贵简单地使用提供给您的服务器端技术(会话,应用等一些类)。

与JS是不可能做到这一点。你在哪里储存了全球的信息(计数器变量)?

每当客户端连接到服务器的所有JS代码重新加载,这样你就没有办法来存储这些信息。

另外,如果你想使用cookies记住,cookie是特定于它们所使用的客户端。

0

实现此目的有多种方式。

DB中的会话是一种方式。不过,这可以用来了解您的网站上有多少匿名用户。

另一种方式来完成你正在寻找的任务是标志一个叫,说,新领域在用户表中的用户“LOGGED_IN。”

当登录方法执行,该标志被相应地修改,以注销方法类似。然后,每次用户尝试登录时都会运行SELECT查询,以检查当前登录的人数并相应地执行操作。

一个更好的方法是在DB中记录多少登录用户的总数,增加和减少,取决于执行“登录”或“注销”方法。通过这种方式,您无法知道在特定时刻哪些特定用户已登录,但您至少会得到一个您需要的总数。此方法更好,因为您不必在整个用户表上运行SELECT查询,而是可以从数据库中获取特定字段的值,从而提高性能。不幸的是,如果他们每次都不注销,那么这种方法就没有用处,除非您还存储他们的登录时间并在一段时间后注销它们。

要尝试解决用户可能关闭浏览器而不是“注销”的问题,您可能需要存储会话,并结合上面提出的数据库结构。

0

在asp.net你可以添加一个名为global.asax。该文件具有应用程序级别的事件,包括Session_StartSession_End。如果您正在使用数据库,这将使跟踪会话变得很容易。

0

您需要跟踪当前登录数据库的用户。 Sev提供了一些关于如何完成它的好主意。但正如他对答案的评论中也提到的那样,当用户单击“注销”按钮时,您不能仅将用户标记为已注销,因为许多用户只是在没有正确注销的情况下关闭网页。

所以你需要一个会话管理,在用户不活动的sosomayn秒后自动发送会话。

在我的网上银行软件中,这是90或120秒(更高的安全性),在amazon.com至少几个小时(更好的customerexperience)。您设置此超时时间取决于您的应用程序的特定要求。

无论如何,这是一个相当普遍的问题,所以应该有一些框架已经实现了这一点。

2

我认为这适合于应用程序上下文处理。

只是不保存这些东西在MS SQL,因为它浪费资源连接到数据库。

最简单的方法是创建一个单例对象来保存有关在线用户数量的数据。此对象可能在Application_Start事件中实例化

每次发生登录操作时,都会锁定对象,取消当前用户计数,然后释放锁定。