Php Codeigniter表示会话userdata为空,但存在于db中

Php Codeigniter表示会话userdata为空,但存在于db中,php,codeigniter,session,Php,Codeigniter,Session,每当我尝试在会话的userdata列中检查某个值时,它会认为该值为空,而实际上它在序列化的ci_会话表中 以下是未序列化的数据库内容: array ( 'user_data' => '', 'edit' => array ( 'image_id' => 'HF', 'session_id' => '783c15b057bcd9c19d3fd82f367ee55d', ), ) 下面是我如何在我的视图中检查userdata(注意会话是自动

每当我尝试在会话的userdata列中检查某个值时,它会认为该值为空,而实际上它在序列化的ci_会话表中

以下是未序列化的数据库内容:

array (
  'user_data' => '',
  'edit' => 
  array (
    'image_id' => 'HF',
    'session_id' => '783c15b057bcd9c19d3fd82f367ee55d',
  ),
)
下面是我如何在我的视图中检查userdata(注意会话是自动加载的)

有人看到问题了吗?(这里是整个控制器) 这里还有我的config.php

您可以这样使用

 <?php $edit = $this->session->userdata('edit'): if (!empty($edit)) : ?>


视图变量与CI中的其他变量是分开的。我认为($this->session)在视图中不可用(我还是有点CI新手)。这篇CI论坛帖子讨论了几个可能的解决方案——一个是将“userdata”的值从会话传递到传递给视图的$data数组中——这似乎是最好的解决方案。

尝试过了,恐怕同样的结果是$This->session->set_userdata('edit',$value));它真的存储在ci_会话表中吗?确保ci_session没有错误可以调用$this->session->all_userdata()并打印返回的数组(可能使用error_log()),以便在加载视图之前查看userdata中的内容吗?好的,只是一个粗略的猜测,但在我看来,当ci从数据库检索会话时,它似乎没有找到匹配项。我在配置文件中看到,当默认值为FALSE时,您已将sess\u match\u ip设置为TRUE。当你把它设置回真的时候会发生什么。这听起来像是一个匹配问题,所以如果这不起作用,我也会尝试将sess_match_useragent设置为FALSE。我将“sess_match_useragent”设置为FALSE,它就起作用了!但是,我所说的人在同一个ip地址上,由于没有用户代理检查,所以安全性有点低。可能是因为您使用的是旧版本的CI?sessions表的user\u agent字段只有50个字符,而我相信最新的CI的sessions表的user\u agent字段有120个字符。您提供的pastebin链接有一个80个字符的user_agent字符串,因此我想知道是否出现了不匹配问题,因为user_agent字段的值在放入DB时被截断。将varchar(50)更改为120,它现在可以工作了!非常感谢
            $values = array(
        'image_id' => implode(",",$uploaded_image_ids),
        'session_id' => $this->session->userdata('session_id')
        );

        $this->session->set_userdata('edit', $values);
 <?php $edit = $this->session->userdata('edit'): if (!empty($edit)) : ?>