2014-02-24 44 views
0

是否可以在Asp.Net Web应用程序中允许每个用户只有一个并发登录?防止在用户组中同时并发和最大登录

我正在研究一个Web应用程序,我想确保该网站一次只允许一个用户登录。如何检查当前用户是否已经登录。

此外,我想限制每个组的登录数定义。像最多10个IT部门的人员一次可以登录,最多5个人力资源部门的人员可以登录。

我使用简单的数据库来存储登录信息

+0

这是您的系统,您应该已经知道用户是否已登录或不需要...(可能需要实施某种心跳以保持“我还在登录”功能)。附注:这样的设计可能会导致痛苦的用户体验;考虑删除评论,因为它是非常糟糕的主意,因此在DB中存储“像...... *密码*”这样的信息。 –

+0

@AlexeiLevenkov其实我想检测登录尝试是通过不同的会话或不同的ips –

+0

@AlexeiLevenkov这个问题其实并不那么容易。确定一个账户正在同时从两台不同的机器上访问,同时也没有踢出一台机器上访问该站点的用户,这比这个更复杂一点。 – Servy

回答

2

因此,有你需要不断的在这里追踪和检查两个不同的东西。

第一个是,当有人登录时,您需要使该用户名的任何以前的会话无效。这可以防止某人在一台机器上登录并在另一台机器上登录的微不足道的情况,因为第一台机器将不再能够进行任何新的已认证请求。在大多数情况下,这对于处理那些不积极试图颠覆这一限制的用户来说已经足够了。

接下来有点复杂。你需要寻找的是用户使用相同的身份验证会话ID,但使用不同的IP,broswers等向服务器发送请求。您要查找的是处理一个人登录的情况,然后查看会话信息,然后在另一台机器上重新创建一个具有相同会话ID的相同cookie。

虽然第二种方法确实存在问题。大多数人没有完全静态的IP。一个完整的静态IP实际上非常罕见。也就是说,对于大多数用户来说,他们的IP不会经常旋转;他们不太可能在积极使用该网站时看到它发生变化。如果使用适当的网站,这些人不会有任何问题。但是,将会有一些互联网提供商会频繁轮换他们的IP。这些人也许不会做任何不适当的事情。如果您不处理人们的IP经常变化的事实,您最终可能会不断踢出某些互联网提供商的所有用户。你真正想要寻找的是用户使用给定的IP /会话执行的动作,然后是来自具有相同会话的不同IP的同一个帐户上的动作,然后来自第一IP的更多动作,接下来是第二个,等等。当你看到两个IP在很短的时间间隔内翻转时,这表明两个不同机器上的两个人正在访问该账户。您可以通过合并每个请求的其他方面来进一步改进此度量标准,例如浏览器信息(包含版本,直到最低版本组件)。

+0

我也想限制每组用户登录的最大数量,有没有什么建议? –

+1

@RohitChaudhari你会使用完全相同的技巧,当计数大于一个以外的数字时,你只会开始使会话无效。 – Servy

+0

+1:由于OP可能构建某种游戏,所以它是有用的信息。对于常规的应用程序来说,这样的努力可能是过度的 - 简单地允许许多登录并处理冲突服务器端可能更容易。 –

相关问题