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'); } }
- 额外检查点:
- 确认
config/config.php中的session配置正确,比如$config['sess_driver']设置为合适的驱动(如files),$config['sess_save_path']指向可写的目录; - 登录逻辑中的
$inst_type变量未定义,这会导致getInstitutionLoginDetails查询失败,需要补充该变量的赋值; - 确保redirect跳转后session数据能正常保留,框架默认的redirect方法不会丢失session数据,除非配置有问题。
- 确认
内容的提问来源于stack exchange,提问作者arya
相关产品推荐
相关产品推荐

