PHP-如何防止用户同时从多台计算机登录?

PHP-如何防止用户同时从多台计算机登录?,php,Php,有没有一种方法可以防止用户同时从不同的机器登录系统 谢谢当用户登录时,将其IP地址放入数据库。如果他们的IP发生变化,请要求他们重新登录 更容易的是保存他们的SessionID。如果更改,则使旧会话无效。您可以尝试在登录时将用户的IP地址存储在数据库中,并在用户注销(或您注销)时清除该IP。如果用户尝试登录,但数据库中已存储了不同的IP,这可能表示他们是从两台不同的计算机登录的……虽然不是100%准确,但可能会正常工作您无法阻止这一点。不应该这样做。 相反,您必须手动注销以前登录的所有用户。 只

有没有一种方法可以防止用户同时从不同的机器登录系统


谢谢

当用户登录时,将其IP地址放入数据库。如果他们的IP发生变化,请要求他们重新登录


更容易的是保存他们的SessionID。如果更改,则使旧会话无效。

您可以尝试在登录时将用户的IP地址存储在数据库中,并在用户注销(或您注销)时清除该IP。如果用户尝试登录,但数据库中已存储了不同的IP,这可能表示他们是从两台不同的计算机登录的……虽然不是100%准确,但可能会正常工作

您无法阻止这一点。不应该这样做。
相反,您必须手动注销以前登录的所有用户。
只需跟踪用户数据库中的会话id,如果会话id不等于1,则关闭会话,并在成功登录后存储在数据库中。

这将使所有同时登录的用户不断登录,并破坏他们使用您的服务的所有努力

我建议跟踪用户登录的当前(最后)IP。当用户登录时,更改该IP。将当前IP与身份验证过程的最后一个IP部分进行检查;如果不同,请将其注销。然后可以重新登录,但这会导致另一台计算机的登录被踢出。

所有这些基于IP地址的解决方案的问题是,如果用户位于通过多个IP地址路由其请求的代理服务器之后,这可能会失败,这意味着用户无法保持登录状态

您可以做的是,当任何用户登录时,给他们一个新的会话令牌,并使属于同一用户的所有以前的会话令牌过期


这将要求您保留一个包含所有有效会话令牌以及它们与哪个用户关联的表。请注意,PHP的内置会话处理不太可能在没有太多修改的情况下实现这一点。

事实上应该是相反的吗?如果用户从不同的机器登录,IP将是相同的!如果两台机器位于防火墙/NAT(如公司网络、家庭网络等)后面,则IP将相同。如果他们不是,那么他们很可能有不同的IP地址。天哪,愚蠢的猴子又来了。这些理论家中没有一个真正实施过这样的机制,但每个人都提出了自己的解决方案和观点。你为什么说他/她无法阻止这一点?这是可以做到的,也许不是表演或者不是最好的主意,但这是可以做到的。将会话限制为IP地址容易出错,并且会阻止合法用户访问您的站点。+1,因为我同意您无法做到万无一失。我不知道你为什么被否决得如此糟糕,但也许发生这种情况时也不要失控;)这可能是你不应该做的事情,这是我在写我的答案时没有想到的。的确,最好让用户从多个位置登录。+1这听起来是一个更好的解决方案。您还可以使用JavaScript轮询客户端,如果在15分钟内没有轮询,则会话将过期。为了对付非JavaScript用户,请在每次页面加载时延长有效期。是的,尽管我个人会选择非JavaScript路径,在现有会话的每次页面加载时延长有效期。为此,alex为什么要投票?这有什么帮助吗?@Col.Shrapnel Poll哎呀,如果你愿意的话,应该是轮询服务器,扩展那里的浏览器窗口。尽管您可以争辩说,为了安全起见,最好让空闲的浏览器会话自然失效。