我几乎不好意思问,因为它看起来很简单,但我无法让它更新。
当用户登录时,我将会话变量设置为
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一样。
答案 0 :(得分:2)
确保访问$ _SESSION变量的每个页面都有session_start()。
答案 1 :(得分:0)
听起来像更新它的代码可能没有被执行。您可以尝试在此分配之前添加某种调试语句,如echo,以验证是否正在执行操作。
答案 2 :(得分:0)
根据Scott的回复,仔细检查你的会话是一个很好的“开始”。
有一个很好的提示here,您可能会发现它在调试中很有用。
答案 3 :(得分:0)
重新初始化您的会话ID。这样你就可以确定它有一个新的打屁股id来存储你的变量。
答案 4 :(得分:0)
您是否在此代码后不久进行重定向?
在执行重定向之前执行session_write_close(),以便在重定向之前再次存储会话变量。