2014-04-06 2 views
2

오늘 몇 가지 이상한 세션 동작이 나타났습니다. 먼저 WordPress 웹 사이트의 등록 기능을 생성해야합니다. 나는 과거 WordPress에서 상당한 양의 일을 해왔지만 서버 측 스크립팅 언어와 관련된 일은 결코하지 않았다.세션 변수가 PHP에서 사라졌습니다.

필자는 작업 환경을 테스트하고있었습니다. MySQL에 연결하고 세션이 작동하는지 확인하고 기본적으로 설정에 익숙해지는 작업 환경을 테스트했습니다. 세션을 테스트 할 때

, 나는 다음을했다 :

<?php 
$timer = time(); 

$_SESSION[$timer] = $timer; 

print_r($_SESSION); 
?> 
나는 이런 식으로 뭔가 볼 수있는 페이지의 첫 번째로드에서 기다리고 있었다

: 정확히 무엇을 인 ...

Array 
(
    [1396745563] => 1396745563 
) 

을 일어난. 두 번째 새로 고침, 나는보고 싶어 :

Array 
(
    [1396745563] => 1396745563 
    [1396745570] => 1396745570 
) 

...하지만 그 대신, 나는 보았다

Array 
(
    [1396745570] => 1396745570 
) 

와우! 타임 스탬프 1396745563에 대한 원래 세션 변수는 사라졌으며 새 세션이있었습니다.

내 즉각적인 반응은 session_start()이 누락되었지만 그럴 수 없다는 것이 었습니다. 그냥 더 뭔가 이것에 대해 이상한 것을 자신을 설득, I는 다음과 같이 사용하려면 코드를 변경 :

<?php 
$timer = time(); 

$_SESSION['time_' . $timer] = $timer; 

print_r($_SESSION); 
?> 

나는 아마도 인덱스에 대한 타임 스탬프와 세션 변수를 갖는 특별한 행동의 일종을 한 것으로 생각했다 (이 내가 아는 모든 것에 대해이 질문에 대한 답이 될 수 있습니다.)

이번에는 예상대로 작동합니다. 어레이 인쇄물에 추가 된 페이지가 새로 고침됩니다. 괴짜 변수 (난 그냥 정확한되고있어) 내 원래의 시도에서 이월 세션 데이터입니다

Array 
(
    [time_1396745663] => 1396745663 
    [time_1396745667] => 1396745667 
    [time_1396745671] => 1396745671 
    [time_1396745675] => 1396745675 
    [1396745570] => 1396745570 
) 

그건 : 페이지의 몇 새로 고침 후,이 같은 것을 보았다.

누군가가이 매우 이상한 행동을 설명 할 수 있습니까? 내가 그 일을 할 수 있었음에도 불구하고 그렇게 할 수 있었던 것이 무엇인지 생각할 수 없다.

참고 : 저는 이것이 WordPress와 아무런 관련이 없다고 생각합니다. 나는 이것을하기위한 동기를주기 위해 그것을 포함 시켰습니다.

+0

'으로 session_start()를,'위에, 당신은 볼 것 이 알림 .. ** '알 수 없음 : 숫자 키 건너 뛰기'**. 세션을 사용하기 전에 항상'session_start();'를 추가하는 것이 좋습니다. –

답변

2

$_SESSION의 키는 PHP에서 유효한 변수 이름과 동일한 규칙을 따릅니다. 편지 또는 밑줄 뒤에 숫자, 숫자 또는 밑줄이 와야합니다. 따라서 time()의 출력은 하나 이상의 문자 또는 밑줄로 접두어가 붙지 않는 한 키 역할을 할 수 없습니다.

이 코드에 라인 error_reporting(E_ALL);을 추가하고 PHP는 다음과 같은 공지가 발생합니다 :

사용자가 추가 한 경우

Notice: Unknown: Skipping numeric key 1396747512 in Unknown on line 0

+0

또한 session_start(); 처음에 호출해야합니다 – user4035

+0

@ user4035 질문의 저자는 "내 즉각적인 반응은 session_start()가 누락 된 것일 수도 있지만 그 경우는 아닙니다."라고 말했습니다. –

+0

빠른 답변 주셔서 감사합니다! 그게 참으로 내가 가진 문제 였지만 눈에 띄는 오류 메시지가 없기 때문에 그것이 "적절하게"작동하고 있다고 생각하게되었습니다. –