You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 3.1.13 Session获取失败及调用start()报错求助

问题描述

环境:CodeIgniter 3.1.13,PHP 7.3,已在config/autoload.php的libraries中添加session库。

登录控制器代码:

public function loginForm()
{
     $arrLoginRules = array(
          array(
               "field" => "user_id",
               "label" => "User ID",
               "rules" => "trim|required"
          ),
          array(
               "field" => "pass",
               "label" => "Institution Password",
               "rules" => "trim|required"
          )
     );

     $this->form_validation->set_rules($arrLoginRules);

     if ($this->form_validation->run() == FALSE) {
          $this->load->view('institution/institution_login', $data);
     } else {
          $user = $this->input->post('user_id');
          $password = md5($this->input->post('pass'));

          $user = $this->Institution_model->getInstitutionLoginDetails($user, $inst_type);

          if (!$user) {
               $this->session->set_flashdata('login_error', 'Please check your User ID or Password and try again.', 300);
               redirect(uri_string());
          }

          if ($password != $user->inst_password) {
               $this->session->set_flashdata('login_error', 'Please check your email or password and try again.', 300);
               redirect(uri_string());
          }

          $newdata = array(
               'inst_code' => $user->inst_code,
               'inst_name' => $user->inst_name,
               'logged_in' => TRUE,
          );
          $this->session->set_userdata($newdata);
          
          redirect('index.php/Institution'); // redirect to home
     }
}

登录后首页的index方法代码:

public function index()
{
     if(isset($_SESSION)){
          $this->session->start();
          print_r($_SESSION);die();
     }
     else{
          echo "bad";die();
     }
}

遇到的问题:调用$this->session->start()时触发错误Call to undefined method CI_Session::start(),且无法获取已设置的session数据,输出为空。

解决方法
  • 移除错误的session启动代码:CodeIgniter 3.x中,当你在autoload里加载了session库后,框架会自动完成session的初始化工作,CI_Session类并没有start()方法,这就是报错的直接原因,必须删掉$this->session->start()这行代码。
  • 正确检查和读取session数据:
    可以用CodeIgniter提供的$this->session->userdata()方法读取指定session值,或者直接访问$_SESSION数组(框架初始化后会同步数据到这个全局数组)。修正后的index方法示例:
public function index()
{
    // 检查是否已登录
    if ($this->session->userdata('logged_in')) {
        // 读取单个session值
        echo '机构代码:' . $this->session->userdata('inst_code');
        // 或者输出所有session数据
        print_r($this->session->userdata());
    } else {
        // 未登录则跳转登录页
        redirect('institution/loginForm');
    }
}
  • 额外检查点:
    1. 确认config/config.php中的session配置正确,比如$config['sess_driver']设置为合适的驱动(如files),$config['sess_save_path']指向可写的目录;
    2. 登录逻辑中的$inst_type变量未定义,这会导致getInstitutionLoginDetails查询失败,需要补充该变量的赋值;
    3. 确保redirect跳转后session数据能正常保留,框架默认的redirect方法不会丢失session数据,除非配置有问题。

内容的提问来源于stack exchange,提问作者arya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:02:42