【问题标题】:PHP Session ID being regenerated automatically自动重新生成 PHP 会话 ID
【发布时间】:2012-07-21 22:05:28
【问题描述】:

我发现在我的简单 Web 应用程序中,如果您将页面放置超过大约 5 分钟,然后重新加载页面,则第二次调用 session_id() 将返回不同的值。用户保持登录状态,因此会话数据被移动到新 ID,但我根据会话 ID 跟踪 MySQL 数据库中的购物车项目,当 ID 更改时,与购物车项目的关联丢失。

我的代码中没有任何地方调用过 session_regenerate_id()

救命!

【问题讨论】:

  • 你有什么样的主机?共享服务器?
  • 我假设您相应地调用session_start() - 即在页面加载之前。
  • 您可能应该查看会话到期时间范围“session.gc_maxlifetime”的值。可能太短了。
  • @MikeB 它在共享服务器上,是的
  • @JasonMcCreary 是的,我在页面加载之前调用 session_start。值得注意的是,当ID号发生变化时,用户并没有退出,就好像在调用session_regenerate_id()一样,但是我仔细检查了代码,我们没有在任何地方使用该函数。

标签: php session session-cookies


【解决方案1】:

如果遇到这种情况,您可能还想检查一些事情并且您确实使用了 session_name():

  1. 来自PHP Online Manuals:

警告! 会话名称不能仅由数字组成,必须至少包含一个字母。

  1. 确保您的 session_name() 参数中没有空格,例如

session_name('blah blah')

这两种情况都会强制每次生成一个新的会话 ID。

【讨论】:

    【解决方案2】:

    您可能需要检查您的代码,看看您是否正在使用带有参数的 session_id(),因为这也会更改会话 ID。如果没有看到代码,很难具体说明修复或知道出了什么问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2018-07-31
      • 2011-07-13
      • 2011-08-19
      相关资源
      最近更新 更多