codeigniter session userdata从页面到页面之前工作但最终丢失在页面重定向

时间:2016-08-13 20:58:43

标签: php codeigniter mysqli mariadb

我的Codeigniter内部似乎出了问题。我能够从一个页面访问另一个页面的会话变量。但是有些东西让我重新安装PHP和数据库(MariaDB)。

安装完成后,我的Codeigniter项目开始将会话数据从一个页面丢失到另一个页面。我确实检查过会话是否实际在ci_sessions表中创建;看来它确实如此;我可以从用userdata设置的同一页面访问会话变量,而不是flashdata。

例如

Tt.php

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

class Tt extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
    public function index()
    {
        $this->session->set_userdata('aa','emi');
        /* if header redirect is commented out and i echo the below
        echo $this->session->userdata('aa'); //will display "emi" */
        /*but if header redirect is not commented out and redirect to Vv.php controller*/
        header("Location: vv"); /*echo $this->session->userdata('aa'); shows nothing in Vv.php controller*/
    }
}

Vv.php

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

class Vv extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
    public function index()
    {
        echo $this->session->userdata('aa'); //shows nothing
    }
}

除了卸载和安装php和数据库(MariaDB)之外,我还没有设置其他任何东西。但在此之前,我可以在Vv中访问Tt中设置的会话变量,反之亦然。

config.php中的会话设置如下:

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

database.php中的数据库设置

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
  'dsn' => '',
  'hostname' => '127.0.0.1',
  'username' => 'root',
  'password' => '<mypassword>',
  'database' => 'appname',
  'dbdriver' => 'mysqli',
  'dbprefix' => '',
  'pconnect' => FALSE,
  'db_debug' => (ENVIRONMENT !== 'production'),
  'cache_on' => FALSE,
  'cachedir' => '',
  'char_set' => 'utf8',
  'dbcollat' => 'utf8_general_ci',
  'swap_pre' => '',
  'encrypt' => FALSE,
  'compress' => FALSE,
  'stricton' => FALSE,
  'failover' => array(),
  'save_queries' => TRUE
);

我已经尝试了所有可能但仍然没有运气让它恢复正常,我不知道是否是MariaDB锁定阅读。如果有人能提出解决方案,我会很高兴。

1 个答案:

答案 0 :(得分:0)

设置时需要设置会话单项http://www.codeigniter.com/user_guide/libraries/sessions.html#adding-session-data

$data = array(
   'aa' => 'emi'
);

$this->session->set_userdata($data);

echo $this->session->userdata('aa');

或者你可以分组项目

$data = array(
  'aa' => 'emi'
);

$this->session->set_userdata('group', $data);

访问组数据,如

$something = $this->session->userdata('group');

echo $something['aa'];

自动加载会话库

如果您在config.php http://www.codeigniter.com/user_guide/libraries/sessions.html#session-preferences

中使用CI3,请确保已设置会话保存路径