处理来自同一访问者的新 PHP 会话请求


Handling new PHP session request from same visitor

我使用 PHP 5.4.36、Apache/2.2.15、CakePHP 2.5.6。

当访问者单击"登录"按钮时,我会检查会话数据。

  • 如果用户已经登录,我会将用户重定向到成员部分。
  • 如果用户未登录,但用户有登录记住cookie,我也会将用户重定向到成员部分。
  • 如果用户未登录,没有记住我的cookie,我会将用户重定向到登录表单。
  • 如果用户未登录,则存在记住我的cookie,但没有会话ID cookie和会话文件,我将创建新的会话和会话cookie。

因此,对于最后一种情况,有时用户可以同时打开 2 个登录页面。
在这种情况下,将打开 2 个选项卡。

  • 第一个选项卡:与服务器连接,不存在会话,不存在会话 ID cookie,记住我 cookie 存在。创建新的会话文件,创建会话 ID cookie 并登录用户。
  • 第二个选项卡:与服务器连接,未找到会话,未找到会话 ID cookie,查找"记住我"cookie。由于第一个选项卡仍尝试登录,并且未创建会话文件和会话 ID cookie,因此将创建新会话。

这两个选项卡之间的请求时间接近 0.5-1.5 秒。如果差异超过2秒,则不存在问题。

此问题

在 1 个请求中变为 1000 次,但是否可以禁用此问题?

编辑:
我不希望用户同时使用不同的用户名登录。我希望用户只登录 1 次。但在这种情况下,使用相同的凭据创建了 2 个会话。所以系统使用最后一个会话。上一个会话变得多余。此外,我的数据库记录显示了两种不同的登录名,尽管用户只登录了一次。

我们根据同一会话限制多次登录,但这远非完美。

除了会话之外,我们还有一个模型,用于跟踪:user_id,session_id,user_agent,IP。 如果用户有超过 1 条记录匹配 4 个匹配中的 3 个,我们假设这是双窗口错误并杀死会话。

这不是完美无缺的,但对我们来说没问题,如果它仍然困扰着你,你可能想按照这些思路实现一些东西。