【问题标题】:session is not available in all controllers in codeigniter会话并非在 codeigniter 中的所有控制器中都可用
【发布时间】:2013-12-05 17:38:57
【问题描述】:

您好,我已经制作了名为 MY_Controller 的基本控制器,并具有以下代码

<?php

class MY_Controller extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->is_logged_in();
    }

    function is_logged_in()
    {
        $is_logged_in = $this->session->userdata('is_logged_in');
        if (!isset($is_logged_in) || $is_logged_in != true) {
            redirect('login');
        }
    }

}
?>

我的 login.php 控制器是

class Login extends CI_Controller {

    public function index()
    {
        $email = $this->input->post('email');
        $password = md5($this->input->post('password'));

        $this->load->model('users');
        $record = $this->users->authenticate_user($email, $password);

        if (count($record) && $record != false) {
            foreach ($record as $user) {
                $userdata = array(
                    'is_logged_in' => true
                 );

            }
            $this->session->set_userdata($userdata);
            redirect('index');
        }
        else
        {
            $this->load->view('login');
        }
    }

}

所有其他控制器都是这样扩展的

class Index extends MY_Controller
{
    function __construct(){
        parent::__construct();
    }
}

class Messenger extends MY_Controller
{
    function __construct(){
        parent::__construct();
    }
}

但会话仅在索引控制器中可用。甚至所有其他控制器也扩展了 MY_Controller

任何人都来帮忙

【问题讨论】:

    标签: php codeigniter session session-variables session-cookies


    【解决方案1】:

    您在哪里初始化了会话库?在autoload.php 中加载您的会话库并尝试。

    $autoload['libraries'] = array('database', 'session'); //in autoload.php
    

    在 config.php 中:

    $config['encryption_key'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //your key here
    

    【讨论】:

      【解决方案2】:

      将会话类放入自动加载器配置中,在application/config/autoload.php

      $autoload['libraries'] = array('session' /* , ... */);
      

      然后在每个控制器中自动可用:

      $session_id = $this->session->userdata('session_id');
      

      并且您可以在每次登录之后(并且仅在之后!)初始化会话数据。

      【讨论】:

        猜你喜欢
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        相关资源
        最近更新 更多