如果用户使用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: /'); } 
+0

谢谢,但看看我发现了错误:http://screencast.com/t/jWVbZ5xKD6R – Nathan 2011-12-29 18:26:47

+0

虽然大多数主要框架都通过与请求X_REQUESTED_WITH标志,这是只有在用户使用框架的情况下才可靠。在框架不可知的方式下传递POST或GET变量更可靠。 – 2011-12-29 18:29:47

+2

啊,我的坏。我习惯于使用$ _SERVER作为$ this-> server =)。更新为使用$ _SERVER ['HTTP_X_REQUESTED_WITH'] – 2011-12-29 18:29:56

我建议传递后或在您的Ajax调用获取变量表示的脚本该请求来自ajax。喜欢的东西:

if(isset($_REQUEST["yay_ajax"])){ 
    // Output your login stuff 
} 
else{ 
    header("Location: index.php"); 
}