0

ユーザーを認証した後、ユーザーに Cookie を送信しようとしています。すべてが完璧に機能し、コードで応答が構築されていますが、クライアントが応答を受け取った後でも、ブラウザーに Cookie が保存されていません (chrome F12 -> Resources で確認します)。

注:応答が私のクッキーでフィドラーで送信されているのを見ることができます

ここに画像の説明を入力

何がうまくいかないのか、ブラウザが 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 では、無効なドメイン (有効なドメインには 2 つのドットが含まれている必要があります) と見なされるため、「localhost」のドメインでCookie を設定することはできません。したがって、Cookie は無効です。

これを解決するには、localhost の場合、次のいずれかを行う必要があります。

  1. ドメインを null に設定します。
  2. ドメインを '' (空) に設定します
  3. ドメインを「127.0.0.1」に設定します

これは私のコードの修正です:

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