[英]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.