2011-05-10 105 views
3

在CodeIgniter 1.7.3中,當您使用set_userdata添加布爾值,整數值和字符串值,然後立即讀取它們時,類型將被保留。但是,如果您重定向到另一個頁面並讀取值,則始終會獲取字符串值。在CI 1.6.1中,類型將被保留。任何想法爲什麼發生這種情況?這是1.7.3中的錯誤嗎?任何解決方法?codeigniter set_userdata不會保留會話數據中的類型

例如:運行test1的設置會話數據,讀回,重定向到Test2和回看了一遍:

<?php 
class Test1 extends Controller 
{ 
    function index() 
    { 
     $this->session->set_userdata(array('vbool'=>TRUE)); 
     $this->session->set_userdata(array('vint'=>23)); 
     $this->session->set_userdata(array('vstr'=>'abc')); 

     $vbool = $this->session->userdata('vbool'); 
     $vint = $this->session->userdata('vint'); 
     $vstr = $this->session->userdata('vstr'); 

     log_message('error', "test1: vbool=$vbool " . gettype($vbool)); 
     log_message('error', "test1: vint=$vint " . gettype($vint)); 
     log_message('error', "test1: vstr=$vstr " . gettype($vstr)); 

     redirect('/backend/test2', 'location'); 
    } 
} 
?> 


<?php 
class Test2 extends Controller 
{ 

    function index() 
    { 
     $vbool = $this->session->userdata('vbool'); 
     $vint = $this->session->userdata('vint'); 
     $vstr = $this->session->userdata('vstr'); 

     log_message('error', "test2: vbool=$vbool " . gettype($vbool)); 
     log_message('error', "test2: vint=$vint " . gettype($vint)); 
     log_message('error', "test2: vstr=$vstr " . gettype($vstr)); 
    } 

} 
?> 

輸出CI LOG

ERROR - 2011-05-09 16:56:11 --> test1: vbool=1 boolean 
ERROR - 2011-05-09 16:56:11 --> test1: vint=23 integer 
ERROR - 2011-05-09 16:56:11 --> test1: vstr=abc string 

ERROR - 2011-05-09 16:56:11 --> test2: vbool=1 string 
ERROR - 2011-05-09 16:56:11 --> test2: vint=23 string 
ERROR - 2011-05-09 16:56:11 --> test2: vstr=abc string 

配置設置

ERROR - 2011-05-09 16:56:11 --> sess_encrypt_cookie= 
ERROR - 2011-05-09 16:56:11 --> sess_use_database= 
ERROR - 2011-05-09 16:56:11 --> sess_table_name=ci_sessions 
ERROR - 2011-05-09 16:56:11 --> sess_expiration=7200 
ERROR - 2011-05-09 16:56:11 --> sess_match_ip= 
ERROR - 2011-05-09 16:56:11 --> sess_match_useragent=1 
ERROR - 2011-05-09 16:56:11 --> sess_cookie_name=ci_session 
ERROR - 2011-05-09 16:56:11 --> cookie_prefix= 
ERROR - 2011-05-09 16:56:11 --> cookie_path=/ 
ERROR - 2011-05-09 16:56:11 --> sess_time_to_update=300 
ERROR - 2011-05-09 16:56:11 --> encryption_key= 
+2

只是一個想法,這並沒有真正解決問題,但爲什麼你沒有嘗試更新到CI2? – Repox 2011-05-10 09:22:55

+0

更新到CI2.0.0解決了這個問題。謝謝! – TomBl 2011-05-11 06:39:50

回答

1

我在CodeIgniter 2.0.0上嘗試了相同的測試,它工作正常 - 存儲在會話中的數據類型與set_使用userdata()讀回會話數據時,userdata()被保留。 所以這似乎是CI 1.7.3存儲會話數據時發生的錯誤,然後進行重定向,然後讀取會話數據。