2010-09-21 70 views
0

我有一个网站具有登录功能,我想要的是如果用户从一台计算机登录到他的帐户,然后再次登录到他的同一帐户同时从另一台计算机他应该首先从他登录的计算机上注销。任何想法如何实现它都会很棒。PHP多次登录

回答

1

假设您使用的是基于cookie的会话,最好的方法是跟踪每个用户的最后一个活动会话ID。这样,当用户从另一台计算机上登录时,最后一个活动会话ID得到更新,并且当他试图在前一个会话中继续时,您可以捕获并结束旧会话。

+0

你会如何比较两个会话?使用基于文件的会话无法访问第二个会话的实际会话数据,因此无法比较哪个会话已更新。 – halfdan 2010-09-21 12:57:34

+0

“以及何时他试图继续上一次会话”但我想要的是,它不应该取决于用户试图继续但异步如果用户回到他登录到第一个时刻的第一台计算机那么他应该有一个弹出窗口说他再次登录他。请让我知道,如果我是有道理的。 – pcraft 2010-09-21 13:08:04

+0

从功能上讲,这是一回事。只要用户无法再访问它,无论您的旧会话是否仍然逗留(直到它超时),都不是真正相关的。如果用户未向服务器发送请求,则无法从用户的计算机上删除cookie。 – tdammers 2010-09-21 13:09:45

2

您需要将会话存储在数据库中。在那里你可以有一个包含会话(session_id,用户名,session_data)的表。 session_id和session_data是自我解释的。您使用“用户名”字段来存储登录用户的名称。如果用户从另一台计算机再次登录,则可以轻松地查询该表并删除重复的会话。

在网络上有很多数据库支持的会话处理的PHP实现可用。

+0

所以这意味着我应该运行后台进程来查看数据库值是否已更改,或者是否有任何其他方式通知第一台计算机应该查询数据库以查看第一台计算机的会话是否应该破坏了? – pcraft 2010-09-21 12:59:08

+0

感谢您的帮助。 – pcraft 2010-09-21 13:00:24

+0

您的登录逻辑会检查会话表中是否已有条目。如果你只是删除条目。如果用户移回他的第一台计算机,会话将失效。 – halfdan 2010-09-21 13:00:52