Asp.net-Mvc

本地主機 cookie 未設置

  • June 2, 2020

我正在嘗試在我的應用程序中設置一個 cookie。

下面是設置 cookie 的程式碼:

public HttpResponseMessage LogIn(UserLoginVM user)
{
   // Do login stuff

   var cookie = new CookieHeaderValue("STUPID-COOKIE", "12345");
   cookie.Domain = Request.RequestUri.Host;
   cookie.Path = "/";
   cookie.HttpOnly = true;

   // Get user's profile

   HttpResponseMessage res = Request.CreateResponse<UserProfileVM>(HttpStatusCode.OK, profile);
   res.Headers.AddCookies(new CookieHeaderValue[] { cookie });

   return res;
}

來自伺服器的響應如下:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
Set-Cookie: STUPID-COOKIE=12345; domain=localhost; path=/; httponly
Access-Control-Allow-Origin: *
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcUFJPSkVDVFNcU2Ftc2tpcC5TZXJ2aWNlV2ViTmV3XFNhbXNraXAuQXV0aEFQSVxTYW1za2lwLkF1dGhBUElcbG9naW4=?=
X-Powered-By: ASP.NET
Date: Wed, 18 Feb 2015 11:58:07 GMT
Content-Length: 8019

請注意以下標題:

Set-Cookie: STUPID-COOKIE=12345; domain=localhost; path=/; httponly

但是,當我進入 Chrome 的“資源”選項卡中的“Cookies”時,什麼都沒有設置。此外,當我向伺服器發送請求時,標頭中沒有 cookie。

下面是讀取 cookie 的程式碼:

CookieHeaderValue cookie = Request.Headers.GetCookies("STUPID-COOKIE").FirstOrDefault();

cookie變數始終為空。

我的應用程序在http://localhost:53998上執行,身份驗證服務在http://localhost:60858上執行

我的 Chrome 版本是 40.0.2214.111。

這是一個展示問題的 GIF:http: //i.imgur.com/q7lkXBz.gif

**編輯:**這似乎不是 Chrome 特有的。這也不適用於 FireFox (v35)。GIF:http: //i.imgur.com/ZewnEtc.gif

我終於設法解決了這個問題。

在來自 API 的響應中,我必須添加Access-Control-Allow-Credentials: true標頭,或者在 WebApiConfig 類中添加以下內容:

public static void Register(HttpConfiguration config)
{
   var cors = new EnableCorsAttribute("*", "*", "*");
   cors.SupportsCredentials = true;

   config.EnableCors(cors);
}

然後我必須在客戶端啟用它,方法是將對像withCredentials中的屬性設置XMLHTTPRequesttrue. 在 AngularJS 應用程序配置函式中,您可以執行以下操作:

$httpProvider.defaults.withCredentials = true;

此外,對於 Chrome,我必須省略Domain(或將其設置為 null)。

希望這可以幫助其他為此苦苦掙扎的人。

引用自:https://stackoverflow.com/questions/28583729