注销 MVC 4 时清除会话

Clear session on Logout MVC 4

我需要知道如何在 MVC 4 asp.net 中注销时清除会话 我几乎尝试了所有事情,但都是徒劳的。

    [AllowAnonymous]
    public ActionResult SignOut()
    {
        Response.AddHeader("Cache-Control", "no-cache, no-store,must-revalidate");
        Response.AddHeader("Pragma", "no-cache");
        Response.AddHeader("Expires", "0");
        Session.Abandon();

        Session.Clear();
        Response.Cookies.Clear();
        Session.RemoveAll();

        Session["Login"] = null;
        return RedirectToAction("Index", "Login");
    }

Session.Clear();
Session.Abandon();
Clear cookies
set session to Null on Logout etc

但是当我点击浏览器的后退按钮时。它重定向到同一个帐户。 请帮助我,单击注销按钮时如何清除会话变量。 我一个一个地尝试了上面的每一个,然后分组但结果相同。

当您点击浏览器后退按钮时,它会从缓存中获取页面,而不是从服务器中获取页面。但是用户将无法在后退按钮后显示的页面上执行任何操作。

如果您仍然希望页面不显示,您应该删除缓存。这是一个最佳实践。这是代码。 (写入Global.asax.cs文件)

 protected void Application_BeginRequest()
    {
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
        Response.Cache.SetNoStore();
    }

编写此代码后,用户将不会在按下后退按钮后看到上一页。

上面写的把Session对象搞清楚的代码是对的。无需更改任何内容。

当用户单击后退按钮时,浏览器会显示页面的缓存版本,这正是用户首次下载该页面时所看到的。但是,根本没有与服务器联系来显示该页面的缓存版本。页面的缓存版本看起来与下载时完全一样,因此您可以看到下载页面时登录的用户。但是,这并不意味着用户仍处于登录状态。

如果您想避免用户导航回之前的缓存页面,更简单的方法是在用户注销时删除浏览器的历史记录。您不能直接这样做,但是有一种解决方法可以提供相同的结果。 运行 这个 JavaScript:

var Backlen=history.length;   history.go(-Backlen); 
window.location.href='new page url';

因此,您需要做的是 return 带有此 JavaScript 的页面,并且,在您阅读 'new page url' 的地方,您必须插入要重定向的页面用户注销时。

当然,避免缓存是一种选择,就像 Ravinder Singh 的回答一样,但避免浏览器缓存所有页面并不是一个好主意。