2011-08-04 4 views
1

로그인 하위 도메인에 세션 변수를 설정하고 로그인에 성공하면 다른 하위 도메인의 응답 json을 설정합니다. 응답 한 json은 스크립트에 의해 검사되고 스크립트는 location.href = "new url"입니다. 리디렉션 된 사이트 "새 URL"에서 사용자가 로그인했는지 여부를 확인하려면 세션 변수를 확인하고 싶지만 세션 변수는 설정되어 있지 않습니다. location.href = "" 내 세션을 파괴합니까? 이 문제를 해결하는 방법? session.cookie_domain'.mydomain.com'으로 설정됩니다.PHP 세션에서의 JavaScript 리디렉션 문제

login.mydomain.com :

$.post('http://api.mydomain.com/index.php', {action: 'login', username: username, password: password}, function(response) { 
      var success = $.parseJSON(response); 
      if(success.success == 'true') { 
       location.replace = 'http://my.mydomain.com'; 
      } 
     }); 

api.mydomain.com :

session_start(); 
$_SESSION['active'] = true; 
header('Access-Control-Allow-Origin: http://login.mydomain.com'); 
echo '{"success": "true"}'; 

my.mydomain.com : 도움을

session_start(); 
if(!isset($_SESSION['active']) && !$_SESSION['active']) { 
    header("Location: http://login.mydomain.com"); 
    echo $_SESSION['access_token'].' test'; 
} 
else { 
    echo 'Success!'; 
} 

감사합니다.

+0

파이어 폭스에서 파이어 버그 및/또는 HTTPFox를 사용하여 헤더에서 앞뒤로 진행되는 것을 확인하십시오. 일반적으로 사라지는 세션은 세션 쿠키가 잘못 설정된 것이므로 새 페이지에서 완전히 새로운 빈 세션을 갖게됩니다. –

답변

1

두 번째 코드 블록에 session_start()을 호출하지 않는 것 같습니다.

+0

session_start가 호출되어 코드 샘플에 추가되었습니다. –

+0

지금 보았습니다. 충분히 공정한, 조금 너무 쉬운 것처럼 보였다. – shanethehat

0

당신이 말한 바로는이 문제에 기여하는 몇 가지 문제가있을 수 있습니다.

1) 페이지가로드 될 때 서버가 PHP 쿠키를 설정하고 페이지로드가 없으면 순수 쿠키가 설정되지 않는다는 것을 의미합니다. 페이지가없는 순수 JSON을 사용하는 경우 세션을 설정할 수 없으며 그것을 브라우저로 돌려 보내십시오.

2) 또한 PHP 세션은 사실 쿠키이고 쿠키에 대한 규칙이 적용되므로 api.mydomain.com에서 PHP 세션을 설정하고 my.mydomain.com에서 작동 할 것으로 예상 할 수 있습니다 실 거예요.

당신은 로그인 데이터를 처리하는 실행 가능한 솔루션과 여러 하위 도메인 나는 이것이 당신에게 도움이 희망

here를 통해 세션을 찾을 수 있습니다.

+0

당신이 말한 것을 확인했지만 세션은 XMLHttpRequest를 통해 페이지를 호출 할 때도 설정됩니다. 문제는 XMLHttpRequest를 통해 PHP 파일을 호출 할 때마다 다른 session_id를 얻을 수 있다는 것입니다. 이유는 무엇입니까? –

+0

'다른 session_id'에 대해 자세히 설명해 주시겠습니까? 세션 정보가 저장되어 있지만 사용중인 session_id가 예상 한 것과 다를 수 있습니다. 귀하의 질문에 "세션 변수가 설정되지 않았습니다"라고 말했습니다. – Ryan

+0

api.mydomain.com에 다음 줄을 추가했습니다 : echo session_id(); api.mydomain.com이 호출 될 때마다 다른 session_id가 반환됩니다. –

1

나는 동일한 문제가 있었으며 상대 URL (location.ref = "index.php")을 사용할 때 모든 세션 변수가 있음을 발견했습니다. 그러나 절대 URL (location.ref = "http://mydomain.com/index.php")을 사용하면 모든 세션 변수가 삭제됩니다.