首先,重要的是要注意,在我的应用程序中,如果您注销您的会话仍然有效,并且您不会只是被重定向回登录页面,而是留在同一页面上。
话虽如此 - 我使用这两种方式中的任何一种在 MVC 应用程序中注销
FormsAuthentication.SignOut()
WebSecurity.Logout()
效果是一样的,如果我立即访问它们,以下属性都不会更改以反映注销:
User.Identity.Name
Thread.CurrentPrincipal.Identity
现在 - 如果我进行重定向,或者只是重新加载页面,那么显然这些属性将更新为空用户。他们只是没有立即表示User.Identity.Name
代表刚刚注销的用户。
这是一个问题,因为我想You are logged in as XXX
在登录/注销后生成表单的文本 - 这可能是在无法重定向的 AJAX 情况下。
我很好奇是否有任何方法可以IPrincipal
在注销(或登录)后触发重置。
我假设人们通常只是Redirect()
在Logout()
通话之后,所以这从来都不是问题,但在 AJAX 情况下,这并不总是实用的。
我当前的解决方案是在我自己的包装器中抽象身份,因此一旦我退出,我就可以更新它。我只是有点担心这可能会产生一些模糊的副作用,特别是如果有人IPrincipal
直接访问而不是通过包装器访问。