ajax异步跨域请求获取cookie

我们设置cookie时一般只是设置了cookie的key以及value,有别的需求的时候呢也只是会设置一下过期时间,然而这种设置并不适用于在跨域的情况下。

在做项目时进行设置cookie如下所示:

  HttpCookie cokie = new HttpCookie("test");
                cokie.Value =“123”;
                cokie.Expires = DateTime.Now.AddHours(1);
                cokie.Domain = "XXXXX";
                cokie.Path = "/";
                cokie.HttpOnly = true;
                Response.Cookies.Add(cokie);

照着这样设置cookie,然而用js中的document.cookie获取全部的cookie是不能够获取到cookie的值。这样的原因首先是因为你设置了httponly,设置了httponly是无法通过js获取到cookie的值,就算注释了不管是js还是用HttpContext.Current.Request.Cookies[“test”]来获取都不能够获取到cookie的值,原因在于通过js跨域请求获取cookie还需要如下操作:

    $.ajax({
        url: xxx,
        type: "post",
        data: { id: id, catid: catid, source: "pc" },
       xhrFields: {
            withCredentials: true
        },
        success: function (result) {
            var all = JSON.parse(result);
        

        }
    })

最关键的是请求的时候要加上:

 xhrFields: { withCredentials: true }

 

 然后服务端要进行设置:

HttpContext.Response.AddHeader("Access-Control-Allow-Credentials", "true");
HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "http://xxxx");

 这样你就可以获取到相应的cookie值,需要注意的是设置domain在接收cookie的那个域名下以及HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "http://xxxx");要加指定的域名,不能用*

 

posted @ 2018-11-06 16:50  凉夏诺浅  阅读(1180)  评论(0编辑  收藏  举报