繁体   English   中英

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

[英]How to store array in CodeIgniter sessions?

我正在使用setActiveId方法调用控制器,并在会话中存储1个数组,并在使用var_dump($this->session->all_userdata())存储后显示,它显示得很好,但是当我在其他方法中打印会话时在同一控制器中显示checkinkingPermission那么会话中的数组为空。

现在,我将所有步骤重复一个附加步骤。

我确实像在存储之前和之后一样在会话中存储数组,像这样在会话中存储一个虚拟变量,

$this->session->set_userdata('dummy','tesing');

并再次使用var_dump($this->session->all_userdata())打印,它将显示所有具有数组和最后一个虚拟变量的会话,并且当签入checkinkingPermission时,会话和虚拟变量中的数组会完美显示(它解决了我的问题,但它的粗糙性解)。

我想知道是否有任何遗漏或在第一种情况下无法保存数组的问题(数组不大于4Kb(CI会话限制))。

更新资料

来自名为connections_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
}

在friend_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
}

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

重要说明:如果我在这行中写了$this->session->set_userdata('dummy','tesing'); 然后会话数组保存并在所有方法中查看,如果我不写,那行会话数组为空。

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

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

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

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

请参阅有关会话管理文档

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

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

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);
}

虽然,我越看待您的代码,却越不理解为什么要继续进行并在会话结构中设置空白数组(如果仅在条件条件中填充它的话)。 可能想重构一下

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM