2016-08-13 61 views
0

似乎我的Codeigniter內部出了問題。我能夠訪問會話變量從一個頁面到另一個頁面。但是有些東西讓我重新安裝PHP和數據庫(MariaDB)。codeigniter會話userdata從頁面到頁面的工作,但最終在頁面重定向丟失

安裝完成後,我的Codeigniter項目開始將會話數據從一個頁面丟失到另一個頁面。我沒有檢查會話是否真的在ci_sessions表中創建;並看到它的確如此;我可以從它用userdata設置的相同頁面訪問session變量,而不是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的)等。但在此之前,我可以訪問Vt中設置在Tt中的會話變量,反之亦然。在config.php

會話設置如下:

在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 
); 

$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; 

數據庫設置我用盡了一切可能的,但仍然沒有運氣得到它的工作後,我不知道是否是MariaDB讀取鎖定。如果有人能提出解決方案,我會很高興。

+0

使用CI3設置您的會話保存路徑,當你做的print_r出現什麼($這 - >會話級>用戶數據); ? –

+0

print_r($ this-> session-> userdata('aa'))在Tt.php中顯示「emi」,但是當重定向到Vv.php控制器print_r($ this-> session-> userdata('aa'))時,不會顯示任何內容 –

+0

加載URL助手並嘗試使用'redirect('vv','refresh')'重定向'(如果有效)。 – Tpojka

回答

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

+0

我試過用兩種不同的方法將會話數據設置爲單個變量或組,但它仍然不起作用。我確實遵循了存儲在ci_sessions中的數據;我發現存儲了2條記錄。第一個是__ci_last_regenerate | i:1471140552;第二個是__ci_last_regenerate | i:1471140552; something | a:1:{s:2:「aa」; s:3:「emi」;},這意味着它可以將會話數據寫入ci_sessions,但不能再讀取當頁面重定向時,來自ci_sessions的會話數據。我不知道爲什麼突然停止工作,只需卸載並重新安裝PHP和數據庫系統。 –

+0

@amachreetamunoemi你可以從config.php – user4419336

+0

爲你的會話添加你的設置謝謝,我已經將它添加到問題。 –