将单个登录用户维护到php中的帐户

时间:2011-02-12 19:45:13

标签: php mysql login login-control login-script

我想使用 PHP MySQL 创建一个登录系统,并且这样做的方式是每次只有一个人在任何时候都登录到我的系统时间如果同一用户登录到另一个窗口/会话/场所,则应该使旧的运行实例无效并且应该验证新的实例。

我知道我可以通过将session-id存储在数据库中以及一些检查它并继续定期验证它或任何数据库操作的例程来完成这项工作。

我是否还有其他方法可以实现此目的,以便最大限度地减少验证检查,并且我不必在每次刷新页面时触发查询,以检查用户是否处于上次登录的有效登录会话中。

总之,我可以总结一下,我需要一种技术,以便只为我的最后一个有效的登录浏览器窗口提供webapp。

3 个答案:

答案 0 :(得分:2)

您不需要任何轮询方法,实际上您需要做的就是将任何登录用户的会话ID及其用户名存储在数据库中。

然后,在每次登录时,只需检查登录用户是否已存储会话。如果他们这样做,则使那个无效并将新登录的会话存储在数据库中。

当旧会话尝试重新连接到应用时,其会话的数据将不再存储在您的服务器上,因此它们将不再登录。

所有这些都需要在有人登录时进行额外检查,而不是任何轮询方法等。

答案 1 :(得分:0)

每次用户加载主页的网站时,您都必须检查用户是否已登录。这始终是一个SQL查询。因此,将会话密钥与用户数据一起存储,您只需将会话密钥添加到WHERE子句即可识别用户。通过这种方式,您只有一个sql查询,无论如何都要验证用户是否已登录。

答案 2 :(得分:0)

首先,我使用数据库构建它来管理会话策略。如果结果是瓶颈,那么你可以进行优化。

如果应用程序在单个服务器上运行,您可以使用共享内存(例如,使用APC的apc_store& apc_fetch)来存储可以在进程之间共享的一些状态信息。这可以简单地存储最后已知的会话ID,键入用户ID。然后,您可以快速发现当前会话是否仍然有效。

如果您在多台服务器上运行,那么memcache可能值得一试,以实现类似的功能。