2014-10-20 82 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 
}