2011-05-10 42 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存储会话数据时发生的错误,然后进行重定向,然后读取会话数据。