2014-09-05 32 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

相关问题