2012-06-10 1 views
1

AJAX 요청시 $_SESSION superglobal에 문제가 있습니다.

session_start() 세션 코딩 전에 함수가 호출됩니다. 세션 ID는 호출 코드와 AJAX 응답 코드에서 동일합니다 (두 스크립트 모두에 session_id()이 표시됨). AJAX PHP 파일은 같은 도메인에 있습니다. 모든 것은 표준에 정의 된대로 작동해야하지만 print_r($_SESSION)이라는 AJAX 스크립트 파일에서 나는 Arrray() 출력을 얻습니다. 내가 벽돌 벽에 충돌 한

...이 작동하지 않는 이유를 몰라요 ...

는 크롬과 파이어 폭스에 모두를 검사하였습니다.

아이디어가 있으십니까?

UPDATE :

문제는 $.ajax(...) 요청입니다! 내가 AJAX 요청을하면 올바른 세션 ID를 알게되고 session_start() 함수는 TRUE (성공적으로 세션을 계속 진행 함)을 반환하지만 내 $_SESSSION superglobal을 다시 설정합니다!

의 index.php :

<?php 

session_start(); 

$_SESSION['Test']='O.K.'; 

echo("SESSION_ID: " . session_id()); 
echo("SESSION_SIZE:" . sizeof($_SESSION)); 

?> 

... Standard HTML stuff and jQuery include ... 

<script> 
    $.ajax(
    { 
     type: "POST", 
     url: "AJAXTest.php", 
     data: null, 
     success: function(sData) { alert(sData); } 
    }); 

</script> 

AJAXTest.php :

<?php 

session_start(); 

echo("SESSION_ID: " . session_id()); 
echo("SESSION_SIZE:" . sizeof($_SESSION)); 

?> 

지수는 ... 내가 왜 아직 모른다 ...

코드를 걷어 웁니다 .php 출력 :

SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx 
SESSION_SIZE: 1 

경고 출력 :

SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx (right session id) 
SESSION_SIZE: 0 

AJAX 호출 후 $ _SESSION이 비어 있습니다. 같은 세션의 다른 모든 스크립트에서 ... 나는 당황 스럽다.

+0

'session_start()'이전에 코드가 있습니까? –

+0

브라우저에 쿠키가 활성화되어 있습니까? – somnath

+0

var_dump()로 확인하십시오. – sohaan

답변

1

$_SESSION에 값을 입력하지 않았기 때문일 수 있습니다. 그 다음 $ _SESSION 배열에 표시되지 않습니다 print_r($_SESSION);
SESSION_ID()를 할 값 $_SESSION['user']='frankie'

을 설정 print_r($_SESSION)

시도하고에 당신 배열을() 표시됩니다.

+0

문제가 해결되면 대답을 수락으로 표시하십시오. 고맙습니다 그리고 안부 –

+0

나는 초짜 Chaitanya 아니에요 :) Ofcourse 나는 문자열로 테스트했습니다 :) $ _SESSION [ "test"] = "test"; 내 테스트 세션 변수입니다. – StjepanV

1

AJAX가 아닌 세션 자체에서 문제가 될 수 있습니다. 이제 $ _SESSION 배열과 세션 ID 만 테스트 중이지만 세션 저장소는 테스트하지 않습니다. AJAX가 아닌 여러 요청에서 세션 상태가 동일하게 유지되는지 확인하십시오. 예를 들어,이를 사용

$_SESSION['Test' . time()]='O.K.'; 

을 대신 이것 :

$_SESSION['Test']='O.K.'; 

페이지를 새로 고침, 당신의 SESSION_SIZE 수가 증가한다. 증가하지 않으면 php.ini의 세션 저장 매개 변수가 잘못되었을 수도 있습니다. 예를 들어 파일에 세션을 쓰는 동안 문제가 발생하거나 세션에 사용하면 memcache로 문제가 발생합니다.

또한 페이지와 아약스 호출 사이에 다른 요청이 없어야합니다. 스크립트라고하는 이름이 $ _SESSION 배열을 재설정 할 수도 있습니다.

+0

PHP 설정을 테스트하기 위해 완전히 별도의 코드를 작성했습니다.이 코드를 사용하면 모든 것이 잘 작동합니다 ... 따라서 코드는 내 코드와 함께 있어야합니다. 문제는 내 코드가 복잡하고 길고 디버깅하기 어렵다는 것입니다. 모든 사람들에게 감사드립니다. 내가 찾으면 해결책을 게시 할 것이다. – StjepanV

0

문제는 내 사용자 지정 php.ini 파일에있었습니다 ... 분명히 일부 세션의 중요한 설정을 망쳤습니다 (심지어 정의되지 않았을지라도 -> 변경됨).

결과는 session_start()를 호출 할 때마다 $ _SESSION 수퍼 글로벌이 재설정되고 비워졌지만 같은 세션 ID를 남겨두고 혼란스럽고 잘못된 방향으로 던졌습니다. 내가 뼈까지 모두 벗겨 낼 때까지는 오류가 내 코드에 없다는 것이 분명했습니다.

관심을 가져 주신 모든 분들께 감사드립니다.