Java 会话跟踪
我有一个要求,我想用户登录与他的id只有一台机器上。我想在db中使用一个标志,比如isLoggedIn=true或false。所以下一次当用户从其他机器登录时,我去DB中检查他的凭据,如果会话已打开或未打开,我也可以检查标志 这种方法的缺点是,每次注销时,我都必须转到数据库并将该标志设置为false。有没有更好的方法,我不必去服务器端,只需要在客户端验证它,如果它也是不同的机器,但用户id相同Java 会话跟踪,java,javascript,jquery,html,Java,Javascript,Jquery,Html,我有一个要求,我想用户登录与他的id只有一台机器上。我想在db中使用一个标志,比如isLoggedIn=true或false。所以下一次当用户从其他机器登录时,我去DB中检查他的凭据,如果会话已打开或未打开,我也可以检查标志 这种方法的缺点是,每次注销时,我都必须转到数据库并将该标志设置为false。有没有更好的方法,我不必去服务器端,只需要在客户端验证它,如果它也是不同的机器,但用户id相同 提前感谢您的场景有一个重要问题-如果客户端“忘记”更新db(将布尔变量设置为false)-您下次无法登
提前感谢您的场景有一个重要问题-如果客户端“忘记”更新db(将布尔变量设置为false)-您下次无法登录-例如,在客户端出现电源故障和硬重启/关机的情况下,可能会发生这种情况
更好的方法(但不是完美的)-您可以保存客户端的IP地址。唯一可行的方法是在服务器端执行这一严厉规则。想想看:客户知道其他客户的存在的架构是不安全的;让客户端知道其他客户端的当前登录状态或活动更糟糕。唯一应该知道所有客户机的是服务器 为数据库中的每个用户设置“登录”标志是有问题的,因为忘记注销的用户将永远无法再次登录 然而,对于这一苛刻要求,有两种可能的解决方案:
lastActiveTime
、IP
和port
。在客户端代码中,定期对服务器进行“保持会话活动”调用,以更新lastActiveTime
。如果另一个客户端尝试使用具有不同IP和端口的同一用户帐户登录或执行操作,请拒绝该操作,直到lastActiveTime
超过阈值时间(例如,10分钟后)。在注销时或第一个客户端超时后,清除客户端的lastActiveTime
、IP
和端口,以允许流程再次启动