我在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工作起来很有魅力。