【问题标题】:jQuery .ajax() won't set a cookiejQuery .ajax() 不会设置 cookie
【发布时间】:2013-08-22 22:25:16
【问题描述】:

我正在尝试使用 jQuery .ajax() 调用设置浏览器 cookie,但它不起作用。

console.log("before cookies:" + document.cookie);
$.ajax({
    dataType: "json",
    contentType: "application/json",
    url: url,
    type: "GET",
    processData: false
}).then(function (data) {
    console.log("after cookies:" + document.cookie);
});

在服务器端,系统在响应中添加一个Set-Cookie:

Access-Control-Allow-Headers    Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Origin *
Content-Length  63
Content-Type    application/json;charset=ISO-8859-1
Expires Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie  myApiKey=testkey;Expires=Wed, 20-Aug-2014 18:11:57 GMT;Max-Age=31536000

输出为空:

before cookies:
after cookies:

这就是问题所在。主页位于一个子域,而 ajax 调用位于另一个 (api.mydomain.com)。但我认为我已经正确设置了服务器端的 CORS 标头。它应该可以工作。

Firebug 确实报告 cookie 已设置,但不知何故它对外部页面不可见。有什么诀窍?

【问题讨论】:

  • 很可能 Ajax 调用确实设置了 cookie,但它为 远程域而不是您的域设置了 cookie。
  • 您是否将cookie的域设置为.mydomain.com?这将使它可以从任何子域读取
  • 如果设置 cookie 的 Domain=.mydomain.com 可以解决你的问题,你有一个重复的 Can subdomain.example.com set a cookie that can be read by example.com? (如果它没有解决问题,那么 Ajax 可能会引入一些复杂性,它可能不会重复。)

标签: jquery ajax cookies cross-domain


【解决方案1】:

事实证明这是一个 cookie 域问题,有几个曲折:域有一个端口号必须被剥离,此外,此设置中的服务器端无权访问请求主机名,只有ip地址,搞砸了其他事情。

另外,我尝试使用 javascript 在客户端设置 cookie,但事实证明客户端安全性不允许您设置跨域 cookie。 CORS 仅适用于服务器端。

【讨论】:

    猜你喜欢
    • 2013-09-21
    • 1970-01-01
    • 2015-06-07
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多