使用相同的登录凭据阻止多个登录

时间:2013-08-31 17:30:46

标签: java session servlets servlet-filters servlet-listeners

我正在开发一个Web应用程序,它需要同时使用相同的用户名和密码来阻止多次登录。

如果它发生在同一台机器上,那么我们需要对用户会话做一些事情,但是如果它们使用相同的用户名和密码登录到不同的机器上,它也应该阻止。

什么是最好的方法: -

1)我应该在DB中存储机器的用户会话,凭证和IP地址。

2)我们应该在应用程序本身中使用会话跟踪机制。如果是最好的方法是什么?

此外,我们必须牢记以下事项:

1)如果用户在没有注销的情况下关闭浏览器。

2)如果会话超时。

希望它能解决这个问题。

2 个答案:

答案 0 :(得分:0)

根据数据库是否已登录,只需在数据库中有一个字段,其中包含每个用户在线或离线的文本。因此,当有人尝试使用该用户名登录时,如果该字段在提交时为该给定用户显示在线,则检查数据库。如果该字段在线说明,则不允许登录。否则允许登录。

不使用数据库 如果用户在文本文件中联机,您可以存储

$check= "onlineCheck.txt";
$fh = fopen($check, 'a') or die("can't open file");
$nowOnline= "USER678 \n";
fwrite($fh, $nowOnline);

答案 1 :(得分:0)

Besdies数据库命中(如果您的服务器在没有更新数据库的情况下崩溃,可能会失败):数据库友好的方式是不会在每次重新登录时访问数据库,或者您可能会遭到拒绝服务攻击。而是在J2EE中实现会话侦听器,并通过在缓存中查找用户ID来检查是否登录了相同的用户。

如果您有多个应用节点,那么需要一个分布式缓存,其时间与web.xml中的会话超时时间相同。