无法在ASP.NET标识中强制注销

时间:2017-04-04 09:52:57

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-identity owin

虽然我在LogOff方法中尝试了以下某些方法,但用户可以在从系统注销后使用浏览器的“后退”按钮登录。使用ASP.NET标识强制在ASP.NET MVC中注销的最明智的方法是什么?

public ActionResult LogOff()
{
    AuthenticationManager.SignOut();

    //I added these lines extra in order to force logout
    FormsAuthentication.SignOut(); 
    Session.Clear();
    Session.Abandon();
    Session.RemoveAll();
    //

    return RedirectToAction("Index", "Home");
}

2 个答案:

答案 0 :(得分:0)

您需要为整个项目禁用缓存。这是非常糟糕的编程。根本不推荐。

将此下方代码保存在Application_BeginRequest()文件的Global.asax内。

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();

或者 - 您可以使用java脚本来清除缓存,以防止后退按钮,如下图所示,

<script>
function ClearHistory()
 {
  var backlen = history.length;
  history.go(-backlen);
  window.location.href = loggedOutPageUrl //Pass your Index Page
 }
</script>

请完成此link,有很多方法可以阻止后退按钮使用java脚本。

希望它有所帮助。

答案 1 :(得分:0)

需要使用参数调用

AuthenticationManager.SignOut(),具体取决于您登录用户的方式。通常这将涵盖所有情况:

AuthenticationManager.SignOut(
    DefaultAuthenticationTypes.ExternalCookie,
    DefaultAuthenticationTypes.ApplicationCookie,
    DefaultAuthenticationTypes.TwoFactorCookie,
    DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie,
    DefaultAuthenticationTypes.ExternalBearer);

无需FormsAuthentication.SignOut() - 这不会做任何事情。除非你自己使用过,否则不需要放弃会话 - Identity不会在会话中添加任何内容。