防止使用相同的登录凭据进行多次登录

Posted

技术标签:

【中文标题】防止使用相同的登录凭据进行多次登录【英文标题】:Preventing Multiple Login with same login credentials 【发布时间】:2013-09-04 05:54:29 【问题描述】:

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

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

什么是最好的方法:-

1) 我应该将机器的用户会话、凭据和 IP 地址存储在数据库中吗?

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

另外,我们必须牢记以下几点:

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

2) 如果会话超时。

希望它能解决问题。

【问题讨论】:

【参考方案1】:

只需在您的数据库中有一个字段,其中包含每个用户的在线或离线文本,具体取决于他们是否登录。因此,当有人尝试使用该用户名登录时,如果该字段在提交时显示该给定用户的在线,请检查数据库。如果字段显示在线,则不允许登录。否则允许。

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

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

【讨论】:

他们有什么方法可以在应用程序本身中跟踪它。 那么基本上你的意思是你不想使用数据库? 我会尝试在不使用 DB 的情况下在 Web 应用程序本身中实现这一点。 嗯,最好的方法是将在线用户存储到一个文本文件中,并检查该文本文件,如果他们在其中,则不允许登录,因为他们已经登录在。 查看我的新答案【参考方案2】:

Besdies 数据库命中(如果您的服务器在没有更新 db 的情况下关闭,这可能会失败):对数据库友好的方法是不要在每次重新登录时都命中数据库,否则您可能会受到拒绝服务攻击,从而使您崩溃.而是在 J2EE 中实现一个会话侦听器,并通过在缓存中查找用户 ID 来检查同一用户是否已登录。

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

【讨论】:

感谢@tgkprog,哪种类型的 servlet 侦听器最适合跟踪这个? 'Session Listener' 我觉得是一个接口,需要实现。不知道开箱即用/免费软件。但可以在谷歌中寻找

以上是关于防止使用相同的登录凭据进行多次登录的主要内容,如果未能解决你的问题,请参考以下文章

防止多次登录

防止多次登录

当已经有第一人登录时,我们如何防止第二人登录

使用 google 登录可防止用户使用其他帐户再次登录 - iOS

防止同一帐户多次登录(桌面应用程序)

Thinkphp5防止某个IP多次登录的方法