在Logout MVC 4上清除会话

时间:2015-01-02 06:19:42

标签: asp.net-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();
清除cookie在注销等时将会话设置为Null

但是当我点击浏览器的后退按钮时。它重定向到同一个帐户。 请帮帮我,当我点击退出按钮时,我将如何清除会话变量。 我逐一尝试了以上各项,然后分组但结果相同。

2 个答案:

答案 0 :(得分:2)

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

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

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

所以,你需要做的是返回一个包含这个JavaScript的页面,并且在你阅读'new page url'的地方,你必须在你注销时将页面插入你要重定向的页面。

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

答案 1 :(得分:1)

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

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

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

编写此代码后,按下后​​退按钮后用户将无法看到上一页。

上面编写的使Session对象清晰的代码是正确的。无需改变任何事情。