java - 不允许用户多次登录

标签 java

我正在尝试停止多次登录我的应用程序,我正在使用这种方法:

第一次用户登录时,我将用户保存在 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/

相关文章:

java - 在java中的组合框中添加项目运行时

java - 我应该将初始 java String 值从 null 设置为 ""吗?

java - 如何在 JAXB 中存储对象?

java - 如何修复: Anylogic does not connect to Eclipse over Socket

java - ProgressBar可以动态加载吗?

java - 如何在存储过程进行更改后刷新 hibernate 对象

java - 在java中从数据库中检索法语字符

java - 子点击时自动关闭滑动菜单

java - OpenNLP - 使用 DocumentCategorizer 获取每个类别的真实分数

Java Swing : How can I implement a login screen before showing a JFrame?