我们设置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中的获取全部的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");要加指定的域名,不能用*