lis*_*ite 61 c# asp.net forms-authentication
我有一个页面,当你按"注销"它会重定向到login.aspx
有一个Page_Load
方法调用的页面FormsAuthentication.SignOut()
.
母版页会显示在屏幕的右上角的"注销"链接并显示它的条件Page.User.Identity.IsAuthenticated
是true
.然而,通过单步执行代码后,该signout方法不会自动设置IsAuthenticated
到false
这是相当恼人的,任何想法?
Mar*_*art 100
Page.User.Identity.IsAuthenticated
从Page.User
(显然)得到它的值,不幸的是只读,并且在你打电话时不会更新FormsAuthentication.SignOut()
.
幸运的是Page.User
,Context.User
它可以修改其值:
// HttpContext.Current.User.Identity.IsAuthenticated == true;
FormsAuthentication.SignOut();
HttpContext.Current.User =
new GenericPrincipal(new GenericIdentity(string.Empty), null);
// now HttpContext.Current.User.Identity.IsAuthenticated == false
// and Page.User.Identity.IsAuthenticated == false
Run Code Online (Sandbox Code Playgroud)
当您注销当前用户并希望在不进行重定向的情况下回复实际页面时,这非常有用.您可以IsAuthenticated
在同一页面请求中查看您需要的位置.
Bri*_*all 12
一个人每次请求只进行一次身份验证.一旦ASP.NET确定它们是否经过身份验证,那么它不会更改该请求的其余部分.
例如,当有人登录时.当您设置表单auth cookie指示他们已登录时,如果您检查它们是否在同一请求上进行了身份验证,它将返回false
,但在下一个请求时,它将返回true
.当你把某人记录下来时也会发生同样的情况.它们仍然在该请求期间进行身份验证,但在下一个请求期间,它们将不再经过身份验证.因此,如果用户单击要注销的链接,则应将其注销,然后向登录页面发出重定向.
我记得有一个类似的问题,我想我通过在注销时使表单身份验证cookie到期来解决它:
FormsAuthentication.SignOut();
Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddYears(-1);
Run Code Online (Sandbox Code Playgroud)