2013-09-23 78 views
1

我試圖在驗證身份驗證後向用戶發送cookie。一切正常,響應正在我的代碼中構建,但即使在客戶端得到響應後,瀏覽器中也沒有保存cookie(通過chrome F12 - > Resources查看)。在發佈回覆中發送Cookie WebAPI

注:我可以看到應答提琴手被送到我的餅乾

enter image description here

不知什麼錯誤,爲什麼瀏覽器不保存的Cookie。

這裏是的WebAPI函數處理POST請求:

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

您的圖片顯示「請求「標題......」響應「標題中有什麼值? –

+0

請求頭也包含cookie –

回答

4

我發現了什麼問題,因爲在Firefox中的cookie保存。

在Chrome中不能設置cookie與的「localhost」的,因爲它被視爲無效域(有效的域必須包含在它的兩個點)域 - 因此cookie無效。

爲了解決這個問題,在本地主機的情況下,你應該:

  1. 設置爲空的域。
  2. 將域設置爲 ''(空)
  3. 將域設置爲 '127.0.0.1'

這是在我的代碼修復:

cookie.Domain = Request.RequestUri.Host == "localhost" ? null : Request.RequestUri.Host;