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

时间:2015-04-27 12:18:58

标签: javascript ajax cookies http-headers httpresponse

我有一个简单的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对分隔。
  2.   

使用Chrome中的网络工具" Set-Cookie"在响应标头中可见。我还验证了" Set-Cookie"标题使用curl显示。

如何在我的前端应用中保存Cookie,我该怎么做?此外,我的应用仅在 https 上运行。

我很乐意根据要求提供更多细节。

2 个答案:

答案 0 :(得分:12)

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

  

如何在我的前端应用中保存Cookie?

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

作为开发人员,您可以使用"开发人员工具"来检查Cookie的价值。

同一个cookie将在后续请求中发送到同一个域,直到cookie过期。

答案 1 :(得分:7)

浏览器无法访问第三方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)在下一个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?