Asp.net-Mvc
本地主機 cookie 未設置
我正在嘗試在我的應用程序中設置一個 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中的屬性設置XMLHTTPRequest為true. 在 AngularJS 應用程序配置函式中,您可以執行以下操作:$httpProvider.defaults.withCredentials = true;此外,對於 Chrome,我必須省略
Domain(或將其設置為 null)。希望這可以幫助其他為此苦苦掙扎的人。