2010-05-14 5 views
1

그래서 내 코드의이 부분 :PHP : 한 줄에 좁혀 버그, 그것을 알아낼 수 없습니다

print_r($_SESSION['T']); 
$T = array_values($data2); 
print_r($_SESSION['T']); 

출력이 :

Array ([0] => NZL) Array ([0] => ENG [1] => NZL) 

그 선이 처음으로 $ T입니다 선언됩니다. 내가 말할 수있는 한 $ _SESSION [ 'T']이 항목을 얻고 그 문제를 일으키는 이유가 없어야합니다. $ _SESSION의 두 번째 인쇄는 [ 'T']가 표시되는 것을

Array ([0] => ENG [1] => NZL) 

어느 :
는 array_values ​​호출 후 var에 $ (T)가 보이는 점에 유의하는 것이 좋을 것입니다.

Register Globals이 켜져있을 수 있습니다처럼

+0

이것이 좋은 "세션 부작용"버그라고 생각합니다. 잠깐만, 나는 내가 그 참조를 찾을 수 있는지 보자. –

답변

4

이 보이는, 당신은 이런 일이 될 수있는 이유를 생각할 수 알려줘 감사합니다. 당신이 $_GLOBALS['T'] ... 또는 $_GET['T'] 또는 $_POST['T'] 또는 (물론) $_SESSION['T']에 대한 속기로 변수 $T을 사용할 수 있습니다 - 레지스터 전역에 -

if (ini_get('register_globals')) { 
    die("Register Globals is ON - This is BAD"); 
} 
else { 
    die("Register Globals is OFF - This is GOOD"); 
} 

아이디어는 것이 었습니다.

나쁜 생각 인 것처럼 들린다면, 그것은 그랬기 때문에 (지금) 매우 적극적으로 권장되지 않으며 대개 기본적으로 꺼져 있기 때문입니다.

1

이것은 알려진 버그/부작용입니다. 자세한 내용은 this question을 참조하십시오. register_globals을 off로 설정하여 정렬 할 수 있어야합니다.

1

이것은 아마도 register_globalson (매우 끔찍한 것)으로 설정 되었기 때문에 발생했을 수 있습니다. (http://www.php.net/manual/en/security.globals.php 참조)

SESSION/POST/GET/REQUEST/COOKIE 변수가 간섭하지 않도록 레지스터 전역을 비활성화해야합니다.

관련 문제