【问题标题】:Handling new PHP session request from same visitor处理来自同一访客的新 PHP 会话请求
【发布时间】:2015-03-06 13:36:50
【问题描述】:

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

当访问者点击“登录”按钮时,我会检查会话数据。

  • 如果用户已经登录,我将用户重定向到成员部分。
  • 如果用户未登录,但用户已登录,请记住 cookie,我还将用户重定向到成员部分。
  • 如果用户没有登录,没有记住我的 cookie,我将用户重定向到登录表单。
  • 如果用户未登录,rememberme cookie 存在,但没有 session id cookie 和 session 文件,我创建新的 session 和 session cookie。

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

  • 第一个选项卡:与服务器连接,不存在会话,不存在会话 ID cookie,存在记忆 cookie。创建了新的会话文件,创建了会话 ID cookie,并且用户已登录。
  • 第二个标签:与服务器连接,未找到会话,未找到会话 id cookie,找到 rememberme cookie。因为第一个选项卡仍在尝试登录,并且没有创建会话文件和会话 ID cookie,所以创建了新会话。

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

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

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

【问题讨论】:

  • 您想让用户同时使用两个不同的用户名登录吗?在同一个浏览器的两个不同标签页中?
  • 到目前为止有关于这个问题的更新吗?
  • @Naruto 不,对不起。

标签: php apache session cakephp cookies


【解决方案1】:

我们限制了基于同一会话的多次登录,但这远非完美。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多