【问题标题】:Get and store cookie (from Set-Cookie) from an AJAX POST response从 AJAX POST 响应中获取和存储 cookie(来自 Set-Cookie)
【发布时间】:2015-07-05 21:30:10
【问题描述】:

我有一个简单的 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”在响应标头中可见。我还验证了使用curl 出现的“Set-Cookie”标头。

如何将 cookie 保存在前端应用程序中?此外,我的应用仅在 https 上运行。

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

【问题讨论】:

    标签: javascript ajax cookies http-headers httpresponse


    【解决方案1】:

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

    如何将 cookie 保存在前端应用程序中?

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

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

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

    【讨论】:

    • 如何访问它? document.cookie 记录时返回未定义或空字符串。
    • 你根本不用 JS 访问它。浏览器透明地存储它。服务器正常访问它。
    • 所以它会一直包含在我未来的所有 AJAX 请求中?
    • @M3D — 否。HttpOnly 确定是否可以通过the document.cookie interface 访问 用于在其中运行 JS 的 HTML 文档的 cookie。它对响应始终不可用的 Ajax 请求而设置的 cookie 没有影响,并且对浏览器是否存储 cookie 没有影响(这是问题所要问的)。
    【解决方案2】:

    出于安全原因,浏览器无法访问从 ajax 请求收到的第三方 cookie,但是它会自动为您处理这些!

    为此,您需要:

    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) 在下一个 ajax 请求中连接 xhrFields: { withCredentials: true } 以使用浏览器保存的凭据

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

    浏览器会为您处理这些 cookie,即使它们无法从 headersdocument.cookie 读取

    在这里查看我的答案:How to get a cookie from an AJAX response?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-21
      • 2012-10-02
      • 2014-02-26
      • 2021-10-21
      • 2023-03-25
      • 2018-03-16
      相关资源
      最近更新 更多