2012-01-02 72 views
0

我是CodeIgniter的新手,開始使用會話庫。會話不保留自定義用戶數據

我已自動加載會話庫,並嘗試將當前user_id保存到會話userdata數組。但是,當我嘗試在另一頁上閱讀時,信息就消失了。

原生PHP會話工作得很好(測試它),所以它必須是來自CI的東西。

我編程的一個簡單的測試頁面,我測試了以下內容:

  • 設置會話用戶數據。
  • 測試頁面正確顯示用戶數據。
  • 取消註釋控制器代碼中的設置會話數據行並重新加載頁面。
  • 測試頁面不顯示用戶數據。

控制器的代碼:

視圖
class Welcome extends CI_Controller { 

    public function index(){ 
     $data = null; 

     $data['test'] = "Yeeeeh!!"; 
     $this->session->set_userdata($data); 

     $this->load->view('welcome_message', $data); 
    } 
} 

代碼:

<?php 
    echo $this->session->userdata('test'); 
?> 
+0

請閱讀使用說明書的會議助手是如何工作的,*前*你問的問題。看到這裏:http://codeigniter.com/user_guide/libraries/sessions.html – hakre 2012-01-02 14:19:53

+0

Thx的明確評論...我閱讀手冊,並做了所有事情說明。我自動加載庫,設置會話vdata,然後嘗試讀取它.. – 2012-01-02 14:29:12

+0

所以,如果你沒有得到任何錯誤,你安裝它OK。現在再次閱讀手冊,但這次是關於如何使用它。特別是關於如何命名會話值的部分。 – hakre 2012-01-02 14:30:43

回答

-1

CI的會話是cookie,而不是PHP本地會話。在一個視圖中調用會話可以工作(IIRC),但由於您的視圖是在創建會話的相同請求中加載的,因此不會進行設置。

你需要調用它的另一個請求(即另一個控制器),或在其他地方設置會話(在另一個控制器,通過AJAX也工作),或使用本機PHP $ _SESSION數組來代替。

我覺得你的實際代碼只是測試的情況下,否則爲什麼不

public function index(){ 
     $data = null; 

     $data['test'] = "Yeeeeh!!"; 
     $this->session->set_userdata($data); 

     $this->load->view('welcome_message', $data); 
    } 

鑑於:

<?php 
    echo $test; 
?> 
+0

感謝您的回答。這確實只是一個測試案例。我想設置當前的登錄用戶,並希望能夠在需要時閱讀。我認爲我會爲此使用本地PHP會話,並可能使用加密庫加密數據。 – 2012-01-02 15:06:02

+0

問題是要求將數據存儲到會話中,您將它直接傳遞給該視圖。 – 2017-12-04 10:12:33

0

爲什麼在視圖中顯示的SESSION_ID,而不是您所創建的 「測試」 變量?

你測試

<?php 
echo $this->session->userdata('test'); 

?>

在視圖文件

+0

我在stackoverflow中犯了一個錯字。抱歉。我認爲的代碼就像你說的那樣。 – 2012-01-02 14:33:57