2011-05-10 4 views
3

CodeIgniter 1.7.3에서 set_userdata를 사용하여 부울, 정수 및 문자열 값을 추가 한 다음 즉시 다시 읽으면 유형이 보존됩니다. 그러나 다른 페이지로 리디렉션하고 값을 다시 읽으면 항상 문자열 값을 가져옵니다. CI 1.6.1에서는 유형이 보존됩니다. 왜 이런 일이 일어나고 있는거야? 1.7.3의 버그입니까? 해결 방법은 무엇입니까?codeigniter set_userdata가 세션 데이터의 유형을 보존하지 않습니다.

예 : 세션 데이터를 설정 다시 읽기, TEST2로 리디렉션 및 다시 읽어 TEST1을 실행 CI 로그에

<?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)); 
    } 

} 
?> 

OUTPUT을

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

+0

CI2.0.0으로 업데이트하면 문제가 해결되었습니다. 감사! – TomBl

답변

1

CodeIgniter 2.0.0에서 동일한 테스트를 시도했지만 제대로 작동했습니다. set_와 함께 세션에 저장된 데이터 유형 userdata()를 사용하여 세션 데이터를 다시 읽을 때 userdata()가 보존되었습니다. 이것은 세션 데이터를 저장할 때 CI 1.7.3의 버그 인 것 같습니다. 그리고 리다이렉션을 한 다음 세션 데이터를 읽습니다.

관련 문제