2012-05-05 3 views
0

세션이 만료 된 경우 여전히 부분적으로 작동하는 다수의 AJAX 호출이 있습니다.세션이 만료 된 경우 AJAX 로그 아웃

예 : 연락 양식이로드되고 채워지거나 보냈지 만 SESSION 변수가 없으므로 AJAX 호출이 백엔드에서 실패합니다.

session_start();  
<?php if(!isset($_SESSION['userid']) {header('Location: index.php');}?> 

그러나 아무것도 장소에두고 발생하지 :

내가 세션을 확인하기 위해 PHP의 일반적인 조각을 설정하고 싶었다는 여전히 존재 같다.

페이지가로드 될 때만 header()가 작동한다고 가정합니다. 정확합니까?

따라서 세션에서 성공 또는 실패를 반환하고 JQUERY에서 리디렉션하도록 AJAX 호출을 받아야한다고 가정합니다.

이렇게하는 것이 가장 좋은 방법입니까? AJAX 호출에서 header()가 재전송 될 수 있습니까? AJAX PHP 호출에서 작동하도록 리디렉션을 가져 오는 또 다른 방법이 있습니까?

들으

* UPDATE *

예 페이지가 이미로드. AJAX 호출은 Contactus 요청을 보내는 게시 페이지로드 함수입니다. 그러므로 header()는 여기서 읽은 바를 따르지 않는다고 가정합니다. header()는 큰 PHP 스크립트의 맨 위에 앉아서 세션이 설정된 모든 요청에 ​​일반적으로 응답 할 수있어 좋았을 것입니다.

세션을 사용하는 각 AJAX 호출마다 체크 인을 작성해야하는 것처럼 보입니다. 일반 함수를 사용할 수 있습니다. 세션이 AJAX 사이트에서 만료되었을 때 사용자를 로그 아웃하는 더 간단한 방법이 있습니까?

+0

이미 출력물을 보내지 않았다면 실제로는 효과가 없습니다. 오류가 있습니까? –

+0

@Truth 그가 AJAX를 통해 해당 정보를 호출하고 그 정보를 얻는다면 그는 이미 출력을했습니다 (AJAX 호출을 수행하려면 출력이 필요합니까?) 따라서 페이지를 새로 고치지 않으면 헤더를 변경할 수 없습니다. –

+0

이 코드는 여기서 발생합니다. AJAX 호출 자체가 아직 출력되지 않았으므로 여전히 가능합니다. 아담은 자신의 질문을 다시 말하고 더 잘 설명해야합니다. –

답변

1

업데이트을 yor 스크립트 :

<?php 
session_start(); 
if(!isset($_SESSION['userid']) { 
    echo 'true'; 
} else echo 'false'; 
?> 

jQuery를 체크 대신, 헤더 리디렉션 대신에 메타 새로 고침을 시도 isset, else isset)

2

AJAX 호출 인 경우 페이지의 헤더가 이미 전송되었으므로 AJAX 호출을 통해 변경할 수 없습니다. $ _SESSION은 [ '사용자 ID가']보다, 반환 true의 경우 : folows로

<?php 
session_start(); 
if(!isset($_SESSION['userid']) { 
    echo '<meta http-equiv="refresh" content="0; url=index.php">'; 
} 
?> 
+0

좋아요,이 작품도,하지만 거기에 어떤 위험, 장점 또는 단점은 '메타 http-equiv = refresh'세션이 만료되었을 때 리디렉션 헤더 대신 사용하는 경우 궁금하네요. – JohnA10

관련 문제