PHP-会话在CodeIgniter 3中重定向后丢失

Kyl*_*ano 2 php session codeigniter

我想在CodeIgniter 3中获得帮助。每次登录并重定向到索引页面时,会话都会丢失。

这是我的代码:

控制器:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Secretariat extends CI_Controller {
    public function __construct(){
        parent::__construct();
        $this->load->helper(array('form', 'url'));
        $this->load->model('SecretariatModel');
        $this->load->model('IndiRegModel');
        $this->load->model('RoomModel');
        $this->load->model('BuildingModel');
        $this->load->model('BilletModel');
        $this->load->model('BatchRegModel');
        $this->load->library('form_validation');
        $this->load->library('session');
    }

    public function secretariatLogin(){

        if ($this->session->isSecretariat){
            redirect('secretariat/index', $data);


        } else{

            $data['title'] = 'PACSA - Philippine Association of Campus Student Adviser';

            $this->load->view('include/toppage', $data);
            $this->load->view('include/defaultnavbar', $data);
            $this->load->view('pacsa/slider');
            $this->load->view('secretariat/secretariatLogin', $data);
            $this->load->view('include/bottompage');

       }

    }

    public function signin(){
        $secretariat = array(
            'sec_email' => $this->input->post('sec_email'),
            'sec_password' => sha1($this->input->post('sec_password'))
        );

        $user = $this->SecretariatModel->getSecretariat($secretariat);
        //print_r($user->name);die();

        if(!$user == null){

            $newdata = array(
                'sec_id' => $user->sec_id,
                'sec_name'  => $user->sec_name,
                'sec_lastname' => $user->sec_lastname,
                'sec_email' => $user->sec_email,
                'sec_password' => $user->sec_password,
                'sec_status' => $user->sec_status,
                'sec_address' => $user->sec_address,
                'logged_in' => TRUE,
                'isSecretariat' => TRUE
            );

            $this->session->set_userdata($newdata);            
            redirect('secretariat/index');
        } else {
            $data['title'] = 'PACSA - Philippine Association of Campus Student Adviser';
            $data['message'] = 'Invalid email or password';

            $this->load->view('include/toppage', $data);
            $this->load->view('include/defaultnavbar', $data);
            $this->load->view('pacsa/slider');
            $this->load->view('secretariat/secretariatLogin', $data);
            $this->load->view('include/bottompage');
        }
    }    

    public function index(){
        $data['title'] = 'PACSA - Philippine Association of Campus Student Adviser';
        $id = $this->session->sec_id;
        var_dump($id);
        echo die();

        $this->load->view('include/toppage', $data);
        $this->load->view('include/secretariatnavbar', $data);
        $this->load->view('pacsa/slider');
        $this->load->view('secretariat/index', $data);
        $this->load->view('include/bottompage');
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,在重定向到索引页面之后,我想验证是否涉及会话。我试图回显用户名和用户名,但得到一个空值。

小智 20

去

系统/库/会话/session.php

在第 281 行并替换

ini_set('session.name', $params['cookie_name']); 
Run Code Online (Sandbox Code Playgroud)

经过

ini_set('session.id', $params['cookie_name']);
Run Code Online (Sandbox Code Playgroud)

此问题通常在 PHP 更新版本升级到 7.3 + 时出现


小智 9

在此链接中:

https://php.developreference.com/article/23484402/Codeigniter+session+data+lost+after+redirect

如果您在 CI 3.x 中工作并且刚刚将您的服务器 php 版本升级到 php 7.x 转到system/libraries/Session/session.php第 281 行并替换ini_set('session.name', $params['cookie_name']);为ini_set('session.id', $params['cookie_name']);


Sof*_*ayf 5

还要检查您的php.ini文件中的此选项:

session.auto_start=1
Run Code Online (Sandbox Code Playgroud)


Kyl*_*ano 2

我刚刚解决了我的问题,结果我有旧版本的 codeigniter 3,我将我的 CI 升级到网站上提供的最新版本。谢谢大家的帮助