[英]Redirect to login after ajax call if $_SESSION not set
我在每個頁面上都有一個“檢查會話”頁面,我希望設置$ _SESSION。 這意味着'check session'腳本也包含在ajax / php頁面上。
例如
<?php
require_once globals.php
require_once session.php
?>
<html>
...
<select id="test">
<option>...
<script type="text/javascript">
$('#text').change(function(){
$.ajax({
...
success: function(result){
alert(result);
}
error: ??
)}
});
</script>
<html>
AJAX PHP
<?php
require_once globals.php
require_once session.php
if(isset($_GET['test'])){
...
};
?>
我的session.php(不適用於AJAX調用):
<?php
session_start();
ob_start();
if(!$_SESSION['username']){
header("Location: http://www.mysite.com/login.php");
die();
}
?>
如果我只在正常加載頁面時沒有設置$ _SESSION,那么這個腳本會將我重定向到login.php,但是在AJAX調用的情況下,JS AJAX函數會返回錯誤,但是我無法將用戶重定向到login.php
我嘗試過以下方法:
在JS中:
error: function(XMLHttpRequest, textStatus, errorThrown) {
if(XMLHttpRequest.status === 401){
document.location.reload(true);
}
},
在session.php中
header("Location: http://www.mysite.com/login.php", true, 401);
這將向JS返回一個401代碼,並且JS重新加載當前頁面,再次調用session.php,現在通常應該重定向到login.php。
但事實並非如此:即使我在沒有設置$ _SESSION的情況下正常加載頁面,我也會得到一個空白頁面。 腳本die()但不重定向。
如何使用適用於普通和AJAX請求的解決方案來解決這個問題?
謝謝
您無法從AJAX頁面重定向用戶,另一方面,您可以從中返回一個值,指示您應該重定向它們,然后在AJAX調用的返回部分執行此操作。
改進:
我建議在你的AJAX頁面中這樣做:
<?php
require_once globals.php
if(!isset($_SESSION['username')) {
echo 'redirectUser';
exit;
}
if(isset($_GET['test'])){
...
};
?>
然后在你的AJAX調用中:
$('#text').change(function(){
$.ajax({
...
success: function(result){
if(result === 'redirectUser') {
window.location.href = 'login.php' //or wherever
}else {
//success
}
}
error: ??
)}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.