2014-09-05 99 views
4
ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
AuthManager.SignOut(); 
AuthManager.SignIn(new AuthenticationProperties { IsPersistent = userInfo.rememberMe }, ident); 
//I would like to get the value here 

所以我試過使用HttpContext.Request.Cookies["cookieName"].Value但它不起作用。實際上,當我做了HttpContext.Response.Cookies.Count時,它返回0.如何在調用IauthenticationManager.SignIn後立即獲取OWIN cookie的值?

+0

使用AJAX身份驗證時,我們需要確保登錄已完成。如何找到? – Galaxydreams 2015-07-01 08:37:34

回答

0

身份驗證管理器未在該點設置cookie。它只設置了應該寫入cookie的標識對象的回調。因此,SignIn方法只會將值存儲在內存中,直到實際發送響應。我做了write about this recently

無論如何,即使您獲得了cookie的價值,它也會被OWIN加密,並且更改它的值將最有可能使cookie失效。

你想用cookie做什麼?

+0

有用的博客文章,謝謝。當'userInfo.rememberMe'爲數據庫表的'true'時,這個想法就是存儲cookie的值,這樣我就可以實現類似Facebook的「你登錄的位置」這樣的用戶可以看到和結束他們的「會話」。在這種情況下,只要具有該特定cookie的客戶端嘗試連接,我就會使Cookie無效。 – noob 2014-09-11 14:51:14

+0

理論上,您可以修改OWIN cookie來嵌入某種您存儲的唯一GUID,但這聽起來像很多工作。更簡單的方法是使用自己的會話標識符在身份驗證cookie旁邊設置自己的Cookie。如果您發現會話無效的Cookie,請關閉身份驗證cookie(不是完整的解決方案,只是集思廣益) – trailmax 2014-09-11 14:57:46

+0

或者更好的解決方案是使用會話ID對身份進行聲明。這種說法將成爲AuthCookie的一部分,不能混淆。並且爲每個請求提供一個過濾器來檢查來自聲明的sessionId是否仍然有效。 – trailmax 2014-09-11 14:59:50