2014-10-20 49 views
0

我製作了一個僅由AJAX調用使用的腳本(檢查用戶和密碼並將用戶登錄)。問題出現在我想阻止用戶直接通過他的瀏覽器(如mywebsite.com/login.php)訪問腳本時。防止訪問使用AJAX的php腳本

如果我這樣做

if (isset($_SESSION['id'])) header("Location: logged.php"); 
else header("Location: index.php"); 

其中logged.php是爲登錄的用戶,當AJAX調用都做了,還有,所以它會重定向到索引中的AJAX調用時該會執行。如果我刪除'其他'部分,他們可以直接訪問它。

+0

那麼,什麼是這個問題碼? – hindmost 2014-10-20 10:12:22

+0

當用戶通過我的html表單登錄時,它會設置ssid,但會將他重定向到index.php而不是登錄他。他需要刷新logged.php的頁面才能工作。 – 2014-10-20 10:14:19

回答

1

如果我正確理解你的問題,你可以添加一個額外的POST變種到您的AJAX調用和做這樣的事情

if($_POST["call"] == true){ 
    //do ajax stuff 
}else{ 
    if(isset($_SESSION['id'])){ 
    header("Location: logged.php"); 
    }else{ 
    header("Location: index.php"); 
    } 
} 
+0

不會'($ _SERVER ['REQUEST_METHOD'])=='POST''也可以嗎?所以我不添加額外的變量?或者用戶也可以繞過這個嗎? – 2014-10-20 10:31:36

1

檢查請求頭

/* AJAX check */ 
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 

} else { 
    // NO AJAX CALL 
    // die("NOT ALLOWED") ... or what ever 
}