我正在尝试在我验证他之后向用户发送cookie。一切都很完美,响应正在我的代码中构建,但即使在客户端得到响应之后,浏览器中也没有保存cookie(通过chrome F12检查它 - >资源)。
注意:我可以看到使用我的Cookie在fiddler中发送的响应:
我想知道出了什么问题以及浏览器为什么不保存cookie。
以下是处理Post请求的WebAPI函数:
public HttpResponseMessage Post([FromBody]User user)
{
IDal dal = new ProGamersDal();
var currentUser = dal.GetUser(user.Username, user.Password);
if (currentUser == null)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Bad request.");
}
else
{
var res = new HttpResponseMessage();
var cookie = new CookieHeaderValue("user",JsonConvert.SerializeObject(new ReponseUser(){username = currentUser.Username, role = currentUser.Role}));
cookie.Expires = DateTimeOffset.Now.AddDays(1);
cookie.Domain = Request.RequestUri.Host;
cookie.Path = "/";
res.Headers.AddCookies(new CookieHeaderValue[] { cookie });
return res;
}
}
答案 0 :(得分:4)
我发现了问题是什么,因为在Firefox中保存了cookie。
在Chrome中,您无法使用“localhost”域设置Cookie,因为它被视为无效域(有效域中必须包含两个点) - 因此Cookie无效。< / p>
为了解决这个问题,如果是localhost,你应该:
这是我的代码中的修复:
cookie.Domain = Request.RequestUri.Host == "localhost" ? null : Request.RequestUri.Host;