php会话变量在初始化后不更新二维数组
我几乎不好意思问,因为它看起来很简单,但我无法让它更新 当用户登录时,我将会话变量设置为php会话变量在初始化后不更新二维数组,php,session,Php,Session,我几乎不好意思问,因为它看起来很简单,但我无法让它更新 当用户登录时,我将会话变量设置为 array('users'=>array('timezone'=>'America/losangeles')) 然后,我可以按如下方式检索数据:$\u SESSION['users']['timezone'] 而且效果很好 但是,在用户配置文件页面中,用户可以更改其时区,当我尝试按如下方式更新$\u会话时,它不起作用: $\u会话['users']['timezone']='America/Denver'
array('users'=>array('timezone'=>'America/losangeles'))代码>
然后,我可以按如下方式检索数据:$\u SESSION['users']['timezone']
而且效果很好
但是,在用户配置文件页面中,用户可以更改其时区,当我尝试按如下方式更新$\u会话时,它不起作用:
$\u会话['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/losangeles')代码>
我不明白为什么这样不行。我绕过了函数调用,创建了如下数组,从而绕过了这个问题:
$_SESSION['users'] = $user_array;
但是出于知识方面的原因,如果有其他人也来到这篇文章中,有人能解释一下这个函数的不同之处吗?没有抛出错误,只是在通过函数注册会话变量后,不允许我将任何内容分配给它…几乎就像它在实例化后变成只读一样。确保您已启动会话()在每个访问$\u会话变量的页面上。听起来更新它的代码可能没有执行。您可以尝试在此分配之前放置某种调试语句,如echo,以验证是否正在执行操作。根据Scott的回复,再次检查会话是否已启动是一个良好的“开始”
有一个很好的技巧,您可能会发现它在调试中很有用。重新初始化会话id。这样,您就可以确定它有一个新的spanking id来存储变量。在这段代码之后是否立即执行重定向
在执行重定向之前,请执行会话写入关闭(),以便在重定向之前再次存储会话变量。谢谢克里斯。我在提交后发现了这个错误,并进行了编辑以修正答案。我永远都不能直截了当地说出PHP函数名:)谢谢。检查它并启动会话…var_dump($_session)显示了所有内容…但仍然无法分配给它?您可能需要显示更多代码。根据您目前所描述的内容,它没有理由不工作。它这样做了,并且正在执行该语句,但只是没有分配给会话。