从 AJAX POST 响应中获取和存储 cookie(来自 Set-Cookie)

IT技术 javascript ajax cookies http-headers httpresponse
2021-02-16 02:31:50

我有一个简单的 jQuery AJAX POST 代码:

$.ajax({
    type: "POST",
    url: AppConstants.URLs.PROXY,
    data: message,
    xhrFields: {
        withCredentials: true
    },
    success: function(data, status, xhr) {
        console.log("Cookie: " + xhr.getResponseHeader("Set-Cookie"));
    }
});

我希望获取 cookie 并使用cookies-js保存它

但根据http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method

  1. 将所有响应标头(不包括与 Set-Cookie 或 Set-Cookie2 不区分大小写匹配的标头)作为单个字符串返回,每个标头行由 U+000D CR U+000A LF 对分隔,不包括状态行,并且每个标头名称和标头值由 U+003A COLON U+0020 SPACE 对分隔。

使用 Chrome 中的网络工具,“Set-Cookie”在响应标头中可见。我还验证了“Set-Cookie”标头是否使用curl.

我该怎么做才能将 cookie 保存在我的前端应用程序中?此外,我的应用程序https上运行

我很乐意应要求提供更多详细信息。

2个回答

您无法在 JS 中获取 cookie 数据。API不允许你。

我该怎么做才能将 cookie 保存在我的前端应用程序中?

只需Set-Cookie在来自服务器端代码的响应中设置标头。浏览器应该会自动保存它。

作为开发人员,您可以使用“开发人员工具”检查 cookie 的value。

并且相同的 cookie 会在后续请求中发送到同一个域,直到 cookie 过期。

您根本无法使用 JS 访问它。浏览器透明地存储它。服务器照常访问它。
2021-04-15 02:31:50
2021-04-25 02:31:50
@ M3D -号HttpOnly确定饼干的JS在内部运行的HTML文档都可以通过访问document.cookie界面它对响应 Ajax 请求而设置的 cookie 没有影响,这些 cookie 总是不可用,并且对浏览器是否存储 cookie 没有影响(这就是问题所在)。
2021-04-27 02:31:50
那么它会一直包含在我以后所有的 AJAX 请求中吗?
2021-05-02 02:31:50
我如何访问它?document.cookie记录时返回未定义或空字符串。
2021-05-05 02:31:50

浏览器不能给访问的第三方Cookie,像那些从出于安全原因,Ajax请求接受,但是它会自动为您需要的照顾!

为此,您需要:

1) 使用您希望返回 cookie 的 ajax 请求登录:

$.ajax("https://example.com/v2/login", {
     method: 'POST',
     data: {login_id: user, password: password},
     crossDomain: true,
     success: login_success,
     error: login_error
  });

2)xhrFields: { withCredentials: true }在下一个 ajax 请求中连接以使用浏览器保存的凭据

$.ajax("https://example.com/v2/whatever", {
     method: 'GET',
     xhrFields: { withCredentials: true },
     crossDomain: true,
     success: whatever_success,
     error: whatever_error
  });

浏览器需要照顾这些cookie的你,即使他们无法从读取headers,也不是document.cookie

在这里看到我的答案:如何从 AJAX 响应中获取 cookie?