1

我有一个使用 PHP 设置 cookie 的域(example.com),如下所示:

$source = 123;
setcookie("source", $source, time()+3600, '/', ".example.com");

我想跨子域共享这个 cookie。当我导航到“sub.example.com/index.php”并运行以下 PHP 代码时:

echo $_COOKIE['source'];

...我得到正确的输出:123。好!

我遇到的问题是,当我使用 jQuery 对“sub.example.com”进行 ajax 调用时,cookie 不会输出。它是空的。

$.ajax({
  type: "POST",
  url: 'http://sub.example.com/index.php',
  dataType: "text",
  error: function(jqXHR,textStatus,errorThrown) {

  },
  success: function() {
   // DOES SOMETHING

  }
});

关于跨子域的 ajax 和 cookie,我有什么不知道的吗?

(我知道上面的 Ajax 调用没有做任何事情。在我的实际代码中,子域上的页面将 COOKIE 值写入数据库。当我直接在浏览器中加载页面时,数据库是正确更新。当我从 ajax 加载页面时,数据库条目会更新,但所有值都是空的。)

4

1 回答 1

1

最后,问题是ajax调用。因为它是跨域(或跨子域),所以答案在 xhrFields 参数(http://api.jquery.com/jQuery.ajax/)中。

$.ajax({
  type: "POST",
  url: 'http://sub.example.com/index.php',
  dataType: "text",
  xhrFields: {
      withCredentials: true
   }
  error: function(jqXHR,textStatus,errorThrown) {
  },
  success: function() {
   // DOES SOMETHING
  }
});
于 2013-11-04T23:40:18.270 回答