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

时间:2015-01-08 12:25:44

标签: php apache session cakephp cookies

我使用 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,找到rememberme cookie。由于第一个标签仍然尝试登录,并且未创建会话文件和会话ID,因此会创建新会话。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

这并不完美,但它对我们来说还不错,如果它仍然困扰着你,你可能想要实现这些方面的东西。