我正在尝试停止多次登录我的应用程序,我正在使用这种方法:
第一次用户登录时,我将用户保存在 session 中,第二次用户尝试再次登录时,我首先检查 session ,如果 session 中已经有相同的用户,我不允许用户登录再次。
这种方法在同一个浏览器中效果很好,但是如果我尝试从另一个浏览器使用同一用户再次登录,它允许多次登录,因为 session 中没有任何内容。
如果我尝试从其他计算机登录,也会发生同样的问题。
请提出建议。 谢谢
这是我所拥有的
User user = (User) rdbHelper.getAuthentication(userid, password);
if(user!=null)
{
session=getThreadLocalRequest().getSession(true);
User loggedInUser = (User) session.getAttribute("user");
if(user.getId() == loggedInUser.getId()){
user.setId(0); // making user null and stopping user to login
}else{
session=getThreadLocalRequest().getSession(true);
session.setAttribute("user", user); // allow user to sing in
}
最佳答案
以下是您可以尝试实现这一目标的步骤:
- 用户登录后立即将其 IP 地址、姓名和/或随机生成的 token 存储在数据库的某个表中。
- 当用户注销时,从表中清除之前存储的值。
- 在登录过程中,检查该表以查看表中是否已存在用户信息,如果信息可用,则表明用户已从其他计算机、浏览器等登录并拒绝登录访问。
- 如果信息不可用,则允许用户登录。
但是当然这并不是万无一失的,根据您的需要,您可能需要添加附加列等。
这种方法也有一些需要处理的缺点,其中之一是:
1) 如果用户的电脑关闭或用户懒得注销会发生什么?在这种情况下,用户将被拒绝访问。
在这种情况下,应该有一些作业以特定的时间间隔运行来执行清理过程。您可能需要将“时间戳”列添加到查找表中,该作业的主要工作是将时间戳与一些预定义的超时值(例如 10 分钟)进行比较,并删除所有这些行。
因此用户可以再次毫无问题地登录。
关于java - 不允许用户多次登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19475184/