如何在CodeIgniter会话中存储数组?

时间:2013-12-24 09:32:44

标签: php arrays codeigniter session

我正在使用方法setActiveId调用控制器并在会话中存储1个数组并在使用var_dump($this->session->all_userdata())存储后显示它完全显示但在同一个控制器中我用其他方法打印会话时说{{ 1}}然后会话中的数组为空。

现在我再一步重复所有步骤。

我在存储之前和之后都存储了数组,我在这样的会话中存储了一个虚拟变量,

checkinkingPermission

并再次使用$this->session->set_userdata('dummy','tesing'); 打印它显示所有带有数组和最后一个虚拟变量的会话,当检入var_dump($this->session->all_userdata())时,会话和虚拟变量中的数组显示完美(它解决了我的问题,但它的粗略解决方案)。

我想知道在第一个场景中没有遗漏任何错误或者阵列没有保存的问题(同样数组不大于4Kb(CI会话限制))。

更新

来自名为connections_model的模型的方法

checkinkingPermission

在friend_model

中定义的另一种方法
public function setActiveFriend($id) {
    $this->load->model('friend_model');
    $this->session->set_userdata('AF',$id);
    if($id==$this->session->userdata('userid'))
    {
        $this->session->set_userdata('MEOWN',1);
    }
    else
    {
        $this->session->set_userdata('MEOWN',0);
    }
    $this->friend_model->setFP($id); // Calls Here a method that is defined in another model
}

在上面的方法中,我在会话数组中设置值,如果我想在同一方法中查看会话值,然后查看其设置和查看,但如果我在任何connections_model文件的方法中打印会话,则数组为空。

重要 如果我写了这行public function setFriendPermissions($id) { $this->session->set_userdata('CFP',array()); $this->db->where('user_id',$id); $locs = $this->db->get('friend_p')->result_array(); if(is_array($locs)) { foreach($locs as $loc) { array_push($this->session->userdata['CP'],$loc['perm_id']); } } $this->session->set_userdata('dummy','tesing'); // Important Line } ,那么会话数组在所有方法中保存和查看,如果我不写那行会话数组是空的。

1 个答案:

答案 0 :(得分:3)

您没有正确访问会话数据:

$this->session->userdata['CURRENTFPERMISSIONS']

这就是你所拥有的。请记住,$ this-> session-> userdata是一个函数,而不是一个数组,说,试试这个

array_push($this->session->userdata('CURRENTFPERMISSIONS'),$locpermission['perm_id']);

请参阅documentation on session management

我不建议对数组使用所有上限键,因为该约定应该用于常量。

除上述内容外,请尝试更改此内容:

if(is_array($locpermissions))
{
        foreach($locpermissions as $locpermission)
        {
            array_push($this->session->userdata['CURRENTFPERMISSIONS'],$locpermission['perm_id']);
        }
}

到这个

if(is_array($locpermissions))
{
        $tmpArr = $this->session->userdata('CURRENTPERMISSIONS');
        foreach($locpermissions as $locpermission)
        {
            array_push($tmpArr,$locpermission['perm_id']);
        }
        $this->session->userdata('CURRENTPERMISSIONS',$tmpArr);
}

虽然,我看你的代码越多,我就越不明白为什么你要继续在会话结构中设置一个空白数组,如果它只在一个条件中填充。可能想重新考虑一下