我在MVC3应用程序中遇到用户登录和注销问题。以下是我的用户控制器中的注销操作示例:
public ActionResult Logout()
{
FormsService.SignOut();
Session.Clear();
return RedirectToAction("index", "home");
}
用户单击“注销”后,将调用此操作,它会清除会话信息,然后将用户重定向到索引页。
在我的索引页面上,我调用C#帮助程序来显示如下消息:
@section links { @Html.HdrLinks("Home", "", Context.User) }
以下是帮助程序代码的一部分:
System.Security.Principal.IPrincipal user
if (user.Identity.IsAuthenticated)
{
return new MvcHtmlString("Welcome " + user.Identity.Name);
}
我的问题是,当注销后立即显示索引页面时,它仍会显示相同的会话信息。换句话说,它仍然显示像“欢迎约翰”这样的消息。仅在我在浏览器中刷新页面后,才能正确地看到会话中未设置用户名。
有没有人对我能做什么有任何想法,以便在注销和重定向之后,索引页面仍然不认为用户已登录?例如,除了RedirecToAction之外,还有一些我可以执行的调用可以帮助我。
更新:
似乎当我将代码更改为以下内容时,它会执行我想要的操作,当它显示索引页面时,它不会显示我仍然登录。但是我不知道为什么会这样做
FormsService.SignOut();
Session.Clear();
Session.Abandon();
return new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index" }));