2011-12-29 100 views
1

在我的登錄系統中,我彈出了一個通過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?

回答

2

將這個在你的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

1

我建議傳遞後或在您的Ajax調用獲取變量表示的腳本該請求來自ajax。喜歡的東西:

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