初始化后,php会话变量不更新二维数组

时间:2010-07-14 20:10:37

标签: php session

我几乎不好意思问,因为它看起来很简单,但我无法让它更新。

当用户登录时,我将会话变量设置为 array('users'=>array('timezone'=>'America/los Angeles'));

然后我可以按如下方式检索数据:$_SESSION['users']['timezone']

它工作正常。

但是在用户个人资料页面中,用户可以更改他们的时区,当我尝试按如下方式更新$ _SESSION时,它不起作用:

$_SESSION['users']['timezone'] = 'America/Denver';

我做错了什么?

---按要求提供更多代码-------

我发现会话变量是由类

中的函数设置的

这是功能:

function session_var_register($object_name, $var_value)
    {
        $_SESSION[$object_name]=$var_value;
    }

以下是该函数的调用方式:

$gf->session_var_register("users", $user_array)

用户数组看起来像array('users'=>array('timezone'=>'America/los Angeles'));

我不明白为什么这不起作用。我绕过了函数调用,只是创建了像:

这样的数组,从而解决了这个问题
$_SESSION['users'] = $user_array;

但是出于知识原因,如果有其他人出现在这篇文章中,有人能解释一下这个功能有什么不同吗?没有抛出任何错误,只是一旦通过函数注册就不允许我为会话变量分配任何内容...几乎就像它在实例化后变为read_only一样。

5 个答案:

答案 0 :(得分:2)

确保访问$ _SESSION变量的每个页面都有session_start()。

答案 1 :(得分:0)

听起来像更新它的代码可能没有被执行。您可以尝试在此分配之前添加某种调试语句,如echo,以验证是否正在执行操作。

答案 2 :(得分:0)

根据Scott的回复,仔细检查你的会话是一个很好的“开始”。

有一个很好的提示here,您可能会发现它在调试中很有用。

答案 3 :(得分:0)

重新初始化您的会话ID。这样你就可以确定它有一个新的打屁股id来存储你的变量。

答案 4 :(得分:0)

您是否在此代码后不久进行重定向?

在执行重定向之前执行session_write_close(),以便在重定向之前再次存储会话变量。