【发布时间】:2011-06-07 18:45:52
【问题描述】:
我在声称未设置 PHP 会话变量时遇到了一些奇怪的问题。我只在一种特殊情况下遇到这种情况:
我的网站有一个 3 步向导,我使用会话来存储用户在每个步骤中的选择。为了启动向导,我使用了一个 init 脚本来确保清除所有旧的向导会话数据 - 然后这个 init 脚本将用户重定向到第 1 步。例如:
// Initialize wizard session and send user to step 1
$_SESSION['wizard'] = array();
$_SESSION['wizard']['step1'] = TRUE;
session_write_close();
header('Location: http://mysite.com/wizard/step1.php');
然后在 step1.php 的顶部,我进行如下检查:
if (!isset($_SESSION['wizard']['step1']))
throw new Exception('Step1 not initialized');
当用户提交 step1 表单时,它会被发回给自己进行验证。如果通过,则再次重定向到第 2 步。
大多数时候,这工作正常。事实上,init 脚本始终有效,并且 step1 表单始终加载没有问题。但有时,在提交第 1 步表单后,会引发“第 1 步未初始化”异常。我看不到初始负载如何通过检查,但表单发布稍后会失败。特别是考虑到这个问题很少发生,而且大多数时候根本没有问题。
我正在使用数据库来存储我的会话数据,但我不认为这是由于会话超时或垃圾收集 - 一些相关的 php.ini 值:
session.use_cookies = 1
session.cookie_lifetime = 0
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 86400
有谁知道是什么导致了这样的问题?任何见解将不胜感激。
谢谢,布赖恩
【问题讨论】:
-
我注意到您发布了您的初始化程序,
session_start();除外 -
如果我找到会话 cookie,我会在每个脚本的顶部调用 session_start(),即。如果(isset($_COOKIE['PHPSESSID']))。也许这是不正确的?绝大多数情况下,事情都没有问题。我不知道为什么我不能故意复制它。
-
您可以在您的问题中发布您的
session_start()代码吗?诊断和解决问题可能很重要。 -
好的,在阅读this 帖子后,我刚刚删除了上面提到的 Cookie 检查。我们会看看我是否继续遇到问题。代码只是
if (isset($_COOKIE['PHPSESSID'])) session_start();