gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:23:36 25 4
gpt4 key购买 nike

通过 $.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com