我在页面上发生了一个jquery Ajax请求。在php方面,我正在检查会话是否处于活动状态并执行某些操作。如果会话未激活,我想将用户重定向到php中的另一个页面(标题重定向)。我该怎么做。
我知道如何在javascript中实现它(即如果session_fail然后更改window.location但是我可以在php / cakephp中做些什么
答案 0 :(得分:6)
重定向只说“你要求的数据可以在这里找到”。
HTTP没有办法说“即使您要求资源进入页面,您应该离开该页面并转到其他地方”。
您需要返回您的JavaScript理解为“转到其他位置”并在您自己的代码中处理它的响应。
答案 1 :(得分:4)
如果我理解你想要发生什么,那么这就是我实现它的方式。它是Prototype而不是jQuery,但它不应该花很长时间来翻译:
new Ajax.Request('process.php', {
on401: function(response) {
var redirect = response.getHeader('Location');
document.location = redirect;
}
});
在PHP中,如果会话处于非活动状态,则输出以下内容:
header('Location: http://example.com/login.php', true, 401);
exit;
答案 2 :(得分:2)
这就是你想要的PHP如果这是一个有规律的请求,而不是一个AJAX
if (isset($_SESSION)) doSomething();
else header("Location: otherUrl");
由于这是一个Ajax调用,因此您不会将控制权传递给php,而只是尝试获取(可能)填充页面特定部分的响应。你没有提到你使用的jQuery ajax函数,但它很重要。我想你会使用$ .get()或$(element).load()??
在不知情的情况下,这是我最好的建议。
Ajax电话:$.get(url, callbackFunc);
php:
if(isset($_SESSION)) echoSomething() else echo("redirect");
callbackFunc:
function(data)
{ if (data == "redirect") window.location = otherUrl;
else
$("#desiredElement").html(data);
}