【问题标题】:How to set cookie in browser from ajax response如何通过ajax响应在浏览器中设置cookie
【发布时间】:2018-08-27 14:43:27
【问题描述】:

我有一个使用 jQuery 向 Web 服务发出 POST 请求的 javascript 函数。 Web 服务响应有一个标头“Set-Cookie: name=value; domain=api.mydomain.com; path=/”和一个 JSON 正文。

我希望浏览器设置 cookie,但它没有。我对这应该如何工作有误吗?有没有其他方法可以让浏览器设置响应头返回的cookie?

$.ajax(
    {
        type: "POST",
        url: "https://api.mydomain.com/service",
        data: body,
        success: handleSuccess,
        error: handleFailure
    }
);

【问题讨论】:

  • Cookie 是特定于域的。应该为api.mydomain.com域设置,不会在发出API请求的网页的域中设置。

标签: javascript jquery ajax cookies


【解决方案1】:

您可以使用 jQuery 中的 localStorage 将数据存储在浏览器中。设置数据使用

localStorage.youdataname = xyz;

要检索数据,只需使用

alert(localStorage.yourdataname);

如果AJAX请求的灵魂目的是在浏览器中设置数据,你可以简单地用上面的代码请求AJAX。

【讨论】:

    【解决方案2】:

    根据 XMLHttpRequest 级别 1 和 XMLHttpRequest 级别 2,此特定响应标头属于您可以使用 getResponseHeader() 获取的“禁止”响应标头

    $.ajax({
        type: 'POST',
        url:"https://api.mydomain.com/service",
        data: body,
        success: function(output, status, xhr) {
            alert(xhr.getResponseHeader('Set-Cookie'));
        },
        cache: false
    });
    

    如果它在您的浏览器上不起作用,请使用它

    function getCookie(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i=0; i<ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1);
            if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
        }
        return "";
    } 
    
    success: function(output, status, xhr) {
        alert(getCookie("MyCookie"));
    },
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 2021-07-20
      • 2012-12-22
      • 2016-11-19
      • 2019-04-26
      • 1970-01-01
      • 2023-03-24
      • 2016-04-10
      • 2018-10-26
      相关资源
      最近更新 更多