防止使用相同的登录凭据进行多次登录
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' 我觉得是一个接口,需要实现。不知道开箱即用/免费软件。但可以在谷歌中寻找以上是关于防止使用相同的登录凭据进行多次登录的主要内容,如果未能解决你的问题,请参考以下文章