2011-07-06 54 views
21

我有驗證碼:何時設置HttpContext.User.Identity?

var authTicket = new FormsAuthenticationTicket(/*blahblah....*/); 
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, 
          FormsAuthentication.Encrypt(authTicket)); 
Response.Cookies.Add(cookie); 
var name = HttpContext.User.Identity.Name; // line 4 

通過將在調試語句,我發現name第4行是空的。但是,下次我在此瀏覽器會話中撥打電話時,HttpContext.User.Identity.Name已正確設置。

那麼這個值何時設置?

+0

只是想知道爲什麼你會手動創建cookie並將其添加到響應而不是隻是調用:FormsAuthentication.SetAuthCookie()? –

+0

也想知道爲什麼你需要從HttpContext獲取用戶名,如果你打算設置一個Auth cookie?當然,如果你要設置一個Auth cookie - 你說你想把這個人設置爲「登錄」 - 如果你不知道他們的用戶名,你怎麼能做到這一點? –

+1

@尼克 - 原因是因爲這是一系列發展中的最新發展,你可以從這裏跟着回來:http://stackoverflow.com/q/6586156/7850 –

回答

18

的HttpContext.User.Identity.Name將設置如果給定的請求包含身份驗證Cookie。在你的情況下,cookie剛添加到瀏覽器的響應中。如果存在,瀏覽器將在以下請求中添加Cookie。

+0

現在,這是我會想到的。除了我遇到不符合你所描述的行爲。看到這裏:http://stackoverflow.com/q/6586156/7850 –

+0

哇,男人。這似乎是你在那裏的一個真正令人費解的問題,但正如我從談話中收集到的,cookie在登錄後與響應一起發送,也在空中客戶端中發送。我會試着看看我能否幫助你解決最初的問題。 – tehshin

+0

是在表單身份驗證和Windows身份驗證中設置的身份驗證Cookie,還是僅用於身份驗證? – MacGyver

2

從你的代碼,它看起來像你要麼就得打電話:

FormsAuthentication.Authenticate(name, password) 

,或者,如果使用成員如下:

Membership.ValidateUser(name, password) 
+0

謝謝,但那不是我要求的。 .. –