Javascript 阻止访问使用AJAX的php脚本

Javascript 阻止访问使用AJAX的php脚本,javascript,php,ajax,Javascript,Php,Ajax,我制作了一个只供AJAX调用使用的脚本(检查用户和密码,并让用户登录)。当我想阻止用户通过浏览器直接访问脚本时,就会出现问题,比如mywebsite.com/login.php 如果我做了类似的事情 if ( isset( $_SESSION['id'] ) ) header( "Location: logged.php" ); else header( "Location: index.php" ); 当logged.php用于登录用户时,它也将在AJAX调用完成时执行,因此在进行AJAX调

我制作了一个只供AJAX调用使用的脚本(检查用户和密码,并让用户登录)。当我想阻止用户通过浏览器直接访问脚本时,就会出现问题,比如
mywebsite.com/login.php

如果我做了类似的事情

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

logged.php
用于登录用户时,它也将在AJAX调用完成时执行,因此在进行AJAX调用时,它将重定向到索引。如果我删除“else”部分,他们可以直接访问它。

如果我正确理解您的问题,您可以在Ajax调用中添加额外的POST var,并执行类似操作

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

检查请求头

/* 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
}

那么这段代码有什么问题呢?当用户通过我的html表单登录时,它会设置ssid,但会将他重定向回index.php,而不是登录。他需要刷新logged.php页面才能工作。
($\u SERVER['REQUEST\u METHOD'])=='POST'
也可以吗?所以我不添加额外的变量?或者用户也可以绕过这一点?