【问题标题】:jquery ajax call not sending cookiejquery ajax调用不发送cookie
【发布时间】:2011-12-16 05:42:09
【问题描述】:

我有一个跨子域的 jQuery ajax 调用,它可以正常工作,但它不发送 cookie。有没有办法做到这一点?

【问题讨论】:

  • 你的 ajax 调用看起来如何......很难猜到
  • $.ajax({ type: 'POST', url: 'api.example.com', data: {/*这里有一些数据*/}, dataType: 'json' })。类似的东西

标签: jquery ajax


【解决方案1】:

这对我来说听起来像是预期的行为。 Cookies 是每个域的(包括子域)。但我认为你可以用这样的方式强制它:

$.ajax({
   headers: {'Cookie' : document.cookie },
   url: "sub.domain.com",
   success: function(){ ...

这是完全未经测试的,所以让我知道它是否有效;)

编辑: 有一个替代解决方案可用:

xhrFields: {
    withCredentials: true
}

在这里查看:How do I SET a Cookie (header) with XMLHttpRequest in JavaScript?

此外,您可以在 PHP 中设置 cookie,以便它们在您的所有子域中都有效。像这样的:

ini_set('session.cookie_domain', '.example.com')

注意“。”在域之前 - 这将为 example.com 及其所有子域设置 cookie。

您可以使用上述方法在您的应用程序中设置 session.cookie_domain 或在您的 php.ini 中设置它。

以上是从here盗取的。

【讨论】:

  • 实际上看起来根本不可能……看这里:stackoverflow.com/questions/2320110/…你可能是 SOL
  • 他们没有,为了进行身份验证,您实际上被路由到 Facebook,然后被重定向回来。对于非现场评论类型的东西,我假设他们使用 iframe。
  • 为什么还需要传递cookie数据?此外,如果您在您的网站上设置 cookie,您应该能够让它跨越您自己的子域。您使用的是什么服务器端技术?
  • 嘘。好吧,更新你的答案说它不能完成,我会接受它。感谢您的帮助。
  • 我正在尝试将所有 api 调用发送到一个地方,api.example.com。但是有些请求需要用户登录。我想如果我绝对需要我可以将会话 ID 作为 post 参数传递,但这会导致太多的代码重复。我正在使用 PHP 和 CakePHP 框架
【解决方案2】:

如果您使用支持CORS 的浏览器并设置withCredentials 属性,这不应该有效吗?

HTTP Cookies and Ajax requests over HTTPS

【讨论】:

  • 这应该只适用于对完全不同域的 AJAX 请求,而不是对子域的请求。
猜你喜欢
  • 2014-03-17
  • 1970-01-01
  • 2016-07-25
  • 2020-06-30
  • 2011-10-19
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多