Codeiniter不会将会话加载到其他页面

时间:2017-08-08 17:16:39

标签: php codeigniter

我在Codeigniter 3.1.4中有一个项目,突然间它没有在其他页面上加载会话变量。我配置为在autoload.php 中自动加载库,但没有工作,我将CI升级到3.1.5但是也没有工作。

我也使用原生会话,但没有成功。

我开始了一个新项目,只有一个控制器用于测试,但没有工作。

测试控制器的代码如下:

<?php 

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

class Home extends CI_Controller {
    public function __construct() {
        parent::__construct();
    }

    public function index() {
        $this->session->set_userdata('test', 'test1');

        echo $_SESSION['test'] . '<br>';
        echo anchor('home/test', 'Validate');
    }

    public function test() {
        echo '<pre>';
        print_r($_SESSION);
    }
}

这是我对Session和Cookie的config.php设置:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

$config['cookie_prefix']    = '';
$config['cookie_domain']    = '';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;

我尝试将会话驱动程序作为数据库,但仍然存在同样的问题。

4 个答案:

答案 0 :(得分:1)

如果自动加载不起作用,请将您的会话库加载到控制器中:

class Home extends CI_Controller {
    public function __construct(){
        parent::__construct();
        $this->library->load('session');
    }

    public function index() {
        $this->session->set_userdata('test', 'test1');
    }

    public function test() {
        echo '<pre>';
        print_r($this->session->all_userdata()); //this will print the whole session array 
        print_r($this->session->userdata('test'));//this will print only session test variable
    }  
}

答案 1 :(得分:0)

将codeignitor会话库加载到application / config / autoload.php文件

autoload.php文件

$autoload['libraries'] = array('session');

home.php文件 [控制器]

class Home extends CI_Controller {

    public function __construct() {
        parent::__construct();
    }

    public function index() {
        $this->session->set_userdata('test', 'test1');
    }

    public function test() {
        echo '<pre>';
        print_r($this->session->userdata('test'));
    }

}

有关详细信息,请按照此link

进行操作

答案 2 :(得分:0)

    Load the the codeignitor session library to application/config/autoload.php file

    $autoload['libraries'] = array('session');

    public function login()
        {
            $email=base64_encode(ucfirst(trim($this->input->post('loginid'))));
            $pass=md5(trim($this->input->post('pass')));    
            $result=$this->db->query("SELECT * from table name where email='$email' and password='$pass);

            if($result -> num_rows() == 1)
            {
                $result = $result->result();
                $emp_id = $result[0]->emp_id; //fetching value from the table 
                $first_name = $result[0]->first_name;  //fetching value from the table 
                $roleid=$result[0]->roleid;  //fetching value from the table 
                $email=$result[0]->email;  //fetching value from the table 
                $admin_data = array(
                                'admin_id'  => $emp_id, //assigning value 
                                'admin_name'  => $first_name,  //assigning value
                                'admin_type'=>$roleid, //assigning value 
                                'admin_email'=>$email //assigning value
                                 );
                $this->session->set_userdata($admin_data);  // Setting session value 
                    var_dump($admin_data);
                       or
                    print_r($admin_data)

        }

答案 3 :(得分:0)

使用$config['sess_driver'] = 'files'时,必须将$config['sess_save_path'] 设置为会话文件文件夹的绝对路径。会话文件驱动程序文档HERE

您可能需要创建自己的目录并为其设置权限。您应该在Web服务器的“公共”文件夹之外创建它。在WAMP安装中,公用文件夹的路径可能如下C:\wamp\www\htdocs\,而Codeigniter的index.php位于该文件夹中。

在基于Linux的Apache系统上,公用文件夹的路径可能是/var/www/htdocs/

您需要在与htdocs相同的级别创建会话文件夹。换句话说,/var/www/sessions/C:\wamp\www\sessions\。必须正确设置权限!!!

CodeIgniter定义一个常量 - FCPATH - 这是主index.php文件的路径。您可以使用它来构建会话文件夹的绝对路径。

$config['sess_save_path'] = substr(FCPATH, 0, strpos(FCPATH, 'htdocs/'))."sessions/");

以上假设htdocs位于index.php所在的位置。调整上面的代码以匹配您的文件夹结构。假设FCPATH是“/ var / www / htdocs /”,那么substr(...)将返回“/ var / www / sessions /”