Codeigniter会话库未存储数组数据


Codeigniter Session library not storing array data

我在model中运行了几个查询,以验证用户是否有效,然后存储某些数据。我可以存储一个查询的数据,但无法为另一个保存。这是我在login controller 中的代码

控制器

if ($user['authenticated']) {
                //Start session
                $this->load->library('session');
                $newdata = array(
                    'user'  => $user['data'],
                    'userPermissions'=>$user['permissions'],
                    'authenticated' => true,
                    'logged_in' => TRUE
                );

                $this->session->set_userdata($newdata);
                }

我已经调试并成功地看到,如果我在$this->session->set_userdata($newdata);之上打印,那么所有的数组数据都会进入user sessions。之后,我不知道为什么session function无法保存所有数据,因为我无法在其他页面中检索userPermissions数据。然而,所有其他数据都在陆续出炉。这是库中的session function代码

库会话

function set_userdata($newdata = array(), $newval = '')
    {
        if (is_string($newdata))
        {
            $newdata = array($newdata => $newval);
        }
        if (count($newdata) > 0)
        {
            foreach ($newdata as $key => $val)
            {
                $this->userdata[$key] = $val;
            }
        }
        $this->sess_write();
    }

任何帮助都将不胜感激。

也许,也只是也许,您在会话中存储了这么多数据。CI不使用原生PHP会话,而是使用cookie会话,这意味着如果你存储了这么多数据,你的cookie可能会很长,因此你的浏览器不会返回整个cookie,只是返回一部分。这意味着,最终您不会在服务器中接收到所有数据。

为了解决这个问题,可以用另一个使用本地PHP会话的库覆盖会话核心库(您可以创建自己的MY_session库,以避免混淆核心)。我在我的项目中使用这个:https://bitbucket.org/xperez/core-session-storage-for-codeigniter工作起来很有魅力。