如果用户使用PHP登录页面,我该如何重定向用户?
问题描述:
在我的登录系统中,我弹出了一个通过AJAX请求的fancyBox灯箱。但是有一个问题。如果用户在他们的浏览器中访问login.php
本身,他们会看到一个无法使用的页面,该页面无法正常工作,因为帮助它的JavaScript位于登录页面弹出的页面上。我想将它们重定向到主页,如果它们位于login.php
。如果用户使用PHP登录页面,我该如何重定向用户?
我试着这样做:
<?php
if($_SERVER['REQUEST_URI'] == '/login.php') {
header("Location: /");
}
?>
除了:
<?php
if($_SERVER['PHP_SELF'] == '/login.php') {
header("Location: /");
}
?>
哪个都不能工作,因为当你打开了它的fancybox弄乱页面并使其空白。
有没有办法让它重定向,如果用户在登录页面本身不影响fancyBox?
答
将这个在你的login.php脚本检测非Ajax请求,并在这种情况下重定向:
//Redirect the user if page not requested via ajax
if(!$_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') { header('Location: /'); }
答
我建议传递后或在您的Ajax调用获取变量表示的脚本该请求来自ajax。喜欢的东西:
if(isset($_REQUEST["yay_ajax"])){
// Output your login stuff
}
else{
header("Location: index.php");
}
谢谢,但看看我发现了错误:http://screencast.com/t/jWVbZ5xKD6R – Nathan 2011-12-29 18:26:47
虽然大多数主要框架都通过与请求X_REQUESTED_WITH标志,这是只有在用户使用框架的情况下才可靠。在框架不可知的方式下传递POST或GET变量更可靠。 – 2011-12-29 18:29:47
啊,我的坏。我习惯于使用$ _SERVER作为$ this-> server =)。更新为使用$ _SERVER ['HTTP_X_REQUESTED_WITH'] – 2011-12-29 18:29:56