会话,每个用户一次登录:注销旧会话或阻止登录新会话


Sessions, one login per user: logout old session or prevent login on new session

我想防止同一个帐户在多个浏览器会话中登录。how已经得到回答。例如:如何限制用户每次会话只能登录一次?和PHP/SESSION:每个用户登录一个?

这两种方法可以防止用户再次登录。然而,Gmail(例如)只是注销旧会话。有了这种技术,对我来说,无论是通过AJAX调用"实时"完成,还是在下一次页面刷新时完成,都无关紧要。

我想知道哪一个是首选,两者的利弊是什么?

因此,再次选择:

  1. 阻止在新浏览器会话中再次登录
  2. 注销旧会话(使用AJAX或下一个请求)

最终阻止某人登录可能会让用户非常头疼,这取决于您的会话超时。假设一个用户在latop上,电池电量耗尽,转到桌面,在x时间内无法登录。浏览器崩溃也是如此。

如果你选择阻止登录,你需要有人随时待命,才能迫使用户注销,以免干扰他们的工作。

这实际上取决于你构建的应用程序是什么。有一些基于web的软件可以限制登录次数。例如,起重机规格的软件限制了登录,因为人们在一个项目上工作了几个小时。公司只购买x个座位,但拥有超过x个用户。因此,如果他们不阻止登录,可能会因为其他人"偷座位"而损失数小时的工作

这真的取决于你来决定哪种选择在你的情况下最有效。

对于这种需求,您需要制作一个数据库表,当用户登录时,该表将更新为带有用户ip地址的用户名,当用户注销时,该行将被删除。现在,您所要做的只是当用户登录时,您必须在表中插入一行用户名和用户ip地址。当用户尝试从不同的浏览器登录同一个帐户时,首先检查该行是否存在,如果不存在,则让他们登录,或者如果存在,则告诉他们从ip地址来看,该用户名已经登录。