Javascript jQuery REST会话不使用';我不工作,但在邮递员公司工作

Javascript jQuery REST会话不使用';我不工作,但在邮递员公司工作,javascript,php,jquery,rest,Javascript,Php,Jquery,Rest,我正在尝试构建一个基于PHP的RESTAPI,但我遇到了这个问题。我在PHP代码中获得了session\u start()和一个简单的登录、注销脚本,它接受相同的用户名和密码进行身份验证: <?php session_start(); header("Access-Control-Allow-Origin: *"); header("Content-type: application/json"); $message = array(); if ($_GET["acti

我正在尝试构建一个基于PHP的RESTAPI,但我遇到了这个问题。我在PHP代码中获得了
session\u start()
和一个简单的登录、注销脚本,它接受相同的
用户名
密码
进行身份验证:

<?php
  session_start();
  header("Access-Control-Allow-Origin: *");
  header("Content-type: application/json");
  $message = array();
  if ($_GET["action"] == "signin") {
    if (count($_POST) && isset($_POST["username"]) && isset($_POST["password"]) && $_POST["username"] == $_POST["password"]) {
      $message["user"] = $_POST["username"];
      $message["success"] = true;
      $_SESSION["user"] = $message["user"];
    } else {
      unset($message["user"]);
      $message["success"] = false;
      unset($_SESSION["user"]);
    }
  } elseif ($_GET["action"] == "signout") {
    session_destroy();
    $message["success"] = true;
  } elseif ($_GET["action"] == "whoami") {
    $message["success"] = true;
    $message["user"] = isset($_SESSION["user"]) ? $_SESSION["user"] : "Guest";
  }
  die(json_encode($message));
?>
我已经用邮递员试过同样的方法,效果很好。但是使用jQuery这是行不通的。因此,我尝试使用:

$.ajaxSetup({
  cache: false
});
尽管如此,我还是尝试添加这样的随机字符串,但响应相同:

也不是这样。有人能帮我继续吗?对我来说,这是一场精彩的演出

$.getJSON("http://localhost/api.php?action=whoami");
// Gives Guest. Okay! :)
$.post("http://localhost/api.php?action=signin", {
  username: "admin", password: "admin"
});
// Gives me success with the user logged in.
$.getJSON("http://localhost/api.php?action=whoami&kill=cache");
// Gives Guest Again! :O

通常会话存储在cookie中。因此,当您进行跨域请求时,cookie不会被共享。一个简单的修复方法是使用
proxy.php
,但现在我得到了使用命名会话的最佳解决方案

使用以下代码获取您的
sid

<?php
  if (isset($_GET["sid"]))
    session_id($_GET["sid"]);
  session_start();
  header("Access-Control-Allow-Origin: *");
  header("Content-type: application/json");
  var_dump(session_id()); // Gives you the SID.

您是否从与API相同的端口运行应用程序(javascript)?是的,两者都在端口80上,但不同的域是否进行跨域请求?@PraveenKumar是的,其中一个建议是为域设置会话cookie。我错过什么了吗?请纠正我,因为它与会话cookie和不同的domains@PraveenKumar我会给它一个+1:)我做到了
<?php
  if (isset($_GET["sid"]))
    session_id($_GET["sid"]);
  session_start();
  header("Access-Control-Allow-Origin: *");
  header("Content-type: application/json");
  var_dump(session_id()); // Gives you the SID.