0

在我对他进行身份验证后,我试图向用户发送一个 cookie。一切正常,响应正在我的代码中构建,但即使在客户端得到响应之后,浏览器中也没有保存 cookie(通过 chrome F12 -> Resources 检查它)。

注意:我可以看到我的 cookie 在提琴手中发送的响应

在此处输入图像描述

我想知道出了什么问题以及为什么浏览器不保存 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;
            }
        }
4

1 回答 1

3

我发现了问题所在,因为在 Firefox 中保存了 cookie。

在 chrome 中,您不能使用'localhost' 域设置 cookie,因为它被视为无效域(有效域中必须包含两个点) - 因此 cookie 无效。

为了解决它,如果是本地主机,您应该:

  1. 将域设置为空。
  2. 将域设置为“”(空)
  3. 将域设置为“127.0.0.1”

这是我的代码中的修复:

cookie.Domain = Request.RequestUri.Host == "localhost" ? null : Request.RequestUri.Host;
于 2013-09-23T16:10:43.597 回答