2011-01-03 6 views
1

PHP session_decode() 함수가 'R'로 표시된 PHP 참조 변수에 대한 객체 유형을 가지고 있음을 발견했습니다. 그러나 session_decode()에서이 객체 유형을 출력하는 방법을 알아낼 수 없습니다. 참조 변수를 $ _SESSION에 할당 한 다음 session_decode()를 호출하면 참조 변수는 session_decode()에 의해 참조되는 변수와 동일한 객체 유형을 가지며 'R'이 아닌 것으로 나타납니다. 'R'의 session_decode 객체 유형에 대한 사용 사례는 무엇입니까?session_decode 결과에서 PHP 참조 변수를 얻는 방법

+0

생성 된 형식은 IIRC 미등록입니다. 따라서 형식을 리버스 엔지니어링 할 수는 있지만 이상하거나 모호한 동작이 발생하면 놀라지 마십시오. 나는 C 소스를 출발점으로 체크 아웃하는 것이 좋을 것이다. 오, 그리고'R'은 아마도 "참고 자료"가 아닌 "자원"일 것이다. – ircmaxell

+0

http://php.net/manual/en/function.session- decode.php # 56106 리소스가 아닌 참조입니다. – stevebot

답변

2

session_encode 변수를 참조로 인코딩하려면 참조 된 변수도 세션에 있어야합니다. 세션에 없다면 원래 형식으로 인코딩합니다.

$foo = 'bar'; 
$_SESSION['foo'] = $foo; 
$_SESSION['bar'] = &$_SESSION['foo']; 
$_SESSION['baz'] = &$foo; 
$_SESSION['hey'] = &$foo; 
var_dump(session_encode()); 

출력은 :

foo|s:3:"bar";bar|R:1;baz|s:3:"bar";hey|R:2; 

당신이 볼 수 있듯이, foo는 문자열로 저장되어 있습니다. barfoo에 대한 참조로 저장되었지만 baz은 세션이 다른 곳에서 디코딩 될 때 존재하지 않는 로컬 변수 $foo을 참조하기 때문에 PHP는 자동으로 원래의 문자열 유형으로 변환합니다. 그러나 hey$foo에 대한 참조이기도하지만 참조 된 변수는 baz으로 저장되므로 PHP는 baz에 대한 참조로 hey을 인코딩합니다.

+0

세션 인코딩 된 참조 변수의 값으로 혼동합니다. 그것은 $ _SESSION의 색인입니까? – stevebot

+1

@stevebot : 참조를 제외하고 $ _SESSION의 1부터 시작하는 색인처럼 보입니다 (왜 'hey'는 3 대신 2를 가질 것입니다). 'bar'를 비표준으로 변경하면 'hey' 참조 번호가 3이되어야합니다. – netcoder

+0

아, 의미가 있습니다. 감사합니다. – stevebot

0

아하, 내가하는 일을 볼 것 같아. 이 같은 일을보십시오 : (운) 참조 유형을 트리거한다

array(
    0 => array(
     0 => 1 
    ), 
    1 => &array(
     0 => 1 
    ), 
) 

:

$array = array(array(1)); 
$array[1] =& $array[0]; 

이제, 배열이 같아야합니다.

관련 문제