Php 会话过期时出现Json语法错误
我正在使用Slim Framework,如果用户丢失了会话,我想将用户重定向到登录页面,但我总是在位置0处得到一个SyntaxError:Unexpected token< 我的php会话验证代码如下:Php 会话过期时出现Json语法错误,php,slim,Php,Slim,我正在使用Slim Framework,如果用户丢失了会话,我想将用户重定向到登录页面,但我总是在位置0处得到一个SyntaxError:Unexpected token
private function _validaSessao() {
$user = $this->userData['IdUser'];
if(null === $user || trim($user) == '') {
header("Location: http://192.168.0.9/", true, 301);
die();
}
}
我已经试过了,包括以下所有内容:
header('refresh:5;url=http://192.168.0.9/');
echo '<script>window.location.href = "http://192.168.0.9/";</script>';
return('<script>window.location.href = "http://192.168.0.9/";</script>');
echo json_encode('<meta HTTP-EQUIV="REFRESH" content="0; url=http://192.168.0.9/">');
但是上面的代码让我检查JavaScript上的每一个调用,我想要一个PHP将重定向给我的解决方案。这样,我就不需要一直检查每一个JS调用(非常多),每次实例化php对象时,它都会检查会话并重定向用户,而不使用JS
更新1-包括JS代码(到处都是可爱的投票:D)
上面的代码引用了我的php路线,然后:
$onapp->get('/planeamento/getDados/:tipo/', function($tipo) {
if ($tipo == 'AUTO') {
$P = new MongoApi\Planeamento();
$ret = array(
$P->getAllMongo();
);
}
echo json_encode($ret);
});
当我这样做时,$p=newmongoapi\Planeamento()代码>我使用_validassao()检查用户在构造函数上是否有有效会话 记住在生成任何输出之前必须调用的。您可以使用和避免在标题之前输出
ob_start ();
header ("Location: http://192.168.0.9/", true, 301);
ob_end_flush ();
服务器无法从AJAX调用重定向客户端。AJAX调用是一个后台HTTP请求。HTTP请求是否被重定向与浏览器无关。浏览器将向AJAX客户端返回请求响应,如果该响应为“您的请求已被重定向”,则仅此而已。同样,重定向不会重定向“浏览器”,而是重定向HTTP请求。或者更准确地说,它告诉HTTP客户端它应该在其他地方重试它的请求;没别的了
如果您的AJAX请求可能由于会话超时而失败,并且每当发生这种情况时,您都希望向用户提供登录页面,那么您必须在客户端执行该操作。为了避免每次都重复相同的代码,您可以从中创建一个函数/对象/服务。例如,沿着以下路线的东西:
function makeAJAXRequest(url, data) {
return fetch(url)
.then(response => {
if (response.status == 403) {
window.location = '/login';
throw new Error('Forbidden');
} else {
return response;
}
});
}
在这里,对于未经授权的请求,服务器将使用403禁止
状态代码进行响应。如果您通过此功能发出所有AJAX请求,它将通过重定向到登录页面自动处理该情况。@wayneOS谢谢,该功能无论如何都无法正常工作……抱歉,我弄错了。你需要在scritp上设置你的header()
,这样才能工作。是的,我也试过了,但问题是JS需要JSON响应。使用此解决方案使用chrome dev工具进行调试时,会加载页面,但浏览器不会更新显示的内容!什么JS?您询问的是如何使用php重定向。你能更新你的问题吗,那么我很乐意帮助你;)非常感谢,伙计,有人真的向我解释得很清楚!而且没有否决我的主题万岁!我会投票支持你的答案,伙计;)
$onapp->get('/planeamento/getDados/:tipo/', function($tipo) {
if ($tipo == 'AUTO') {
$P = new MongoApi\Planeamento();
$ret = array(
$P->getAllMongo();
);
}
echo json_encode($ret);
});
ob_start ();
header ("Location: http://192.168.0.9/", true, 301);
ob_end_flush ();
function makeAJAXRequest(url, data) {
return fetch(url)
.then(response => {
if (response.status == 403) {
window.location = '/login';
throw new Error('Forbidden');
} else {
return response;
}
});
}