jquery - 为什么 jQuery 的 .ajax() 方法不发送我的 session cookie?

标签 jquery ajax session cookies

通过 $.ajax() 登录到站点后,我试图向该站点发送第二个 $.ajax() 请求 - 但是当我检查使用 FireBug 发送的 header ,请求中没有包含 session cookie。

我做错了什么?

最佳答案

我在跨域场景中操作。在登录期间,远程服务器返回 Set-Cookie header 以及设置为 true 的 Access-Control-Allow-Credentials

下一次对远程服务器的 ajax 调用应该使用这个 cookie。

CORS 的 Access-Control-Allow-Credentials 允许跨域日志记录。检查https://developer.mozilla.org/En/HTTP_access_control例如。

对我来说,这似乎是 JQuery 中的一个错误(或者至少是下一个版本中的功能)。

更新:

  1. 不会根据 AJAX 响应自动设置 Cookie(引用:http://aleembawany.com/2006/11/14/anatomy-of-a-well-designed-ajax-login-experience/)

    为什么?

  2. 您无法从响应中获取 cookie 的值以手动设置它 (http://www.w3.org/TR/XMLHttpRequest/#dom-xmlhttprequest-getresponseheader)

    我很困惑..

    应该有一种方法可以让 jquery.ajax() 设置 XMLHttpRequest.withCredentials = "true" 参数。

回答: 您应该使用 http://api.jquery.com/jQuery.ajax/xhrFields 参数

文档中的例子是:

$.ajax({
   url: a_cross_domain_url,
   xhrFields: {
      withCredentials: true
   }
});

服务器正确回答这个请求也很重要。在这里复制@Frédéric 和@Pebbl 的精彩评论:

重要说明:在响应凭据请求时,服务器必须指定域,并且不能使用通配符。如果 header 被通配为:Access-Control-Allow-Origin: *

,则上述示例将失败

所以当请求是:

Origin: http://foo.example
Cookie: pageAccess=2

服务器应响应:

Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Credentials: true

[payload]

否则负载不会返回给脚本。请参阅:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials

关于jquery - 为什么 jQuery 的 .ajax() 方法不发送我的 session cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2870371/

上一篇:jQuery 更改类名

下一篇:jQuery: 外部 html()

相关文章:

javascript - 所见即所得 HTML 编辑器、字符留置和 MySQL 存储优化

jquery 插件 - WordPress 菜单创建器

javascript - onchange 仅适用于表中的第一行

jquery - Bootstrap 选项卡在“下一个”和“上一个”按钮上移动

javascript - 自动完成与 keydown 混合

mamp上的 session 问题

jquery - 使用 jQuery 和 Ajax.BeginForm 将 div 与 "Loading..."spinner.gif 居中

javascript - 如何ajax仅加载html而不加载图像?

javascript - 将 jquery 的 $(window).scrollTop() 保存为 PHP $_SESSION ['scroll_pos' ] 变量

spring - 一次只有一个用户使用整个 Web 应用程序 - Spring boot