从MVC注销

时间:2009-12-23 09:56:42

标签: asp.net-mvc

我有一个MVC应用程序,我必须注销。要从应用程序注销,我在te母版页上创建了一个链接

[ <a id="A2" name="lnkLogout" href="http://localhost:1234/Home/LogOut" >Logout</a> ]

并在控制器页面中创建了LoutOut操作

 public ActionResult LogOut()
        {
            Session.Clear();
            Session.Abandon();
            Redirect("http://AnotherApplicaton/Home/LogOut");
        }

现在,当我单击LogOut链接时,它会重定向到LogOut操作,并在LogOut操作中删除所有会话,但是当我单击浏览器的后退按钮时,它会返回到上一页并且会话仍然是活。有没有人有这个问题的解决方案。

4 个答案:

答案 0 :(得分:16)

如果你正在使用表单身份验证,那么这就是你要找的......

public ActionResult LogOut()
        {
            Session.Clear();
            FormsAuthentication.SignOut();
            Redirect("http://AnotherApplicaton/Home/LogOut");
        }

HTH

答案 1 :(得分:6)

您在浏览器中访问的页面将根据浏览器中的缓存设置进行缓存。您需要阻止ASP.net MVC中的缓存,以便浏览器不缓存它们。执行此操作后,请尝试清除浏览器缓存并尝试再次加载页面。注销并尝试后退按钮。您应该收到一条消息,指出该页面已不存在或者其他内容。

有很多方法可以阻止您的ASP.net页面在浏览器中缓存。一种方法是在呈现页面之前执行此操作。

this.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1))
this.Response.Cache.SetCacheability(HttpCacheability.NoCache)
this.Response.Cache.SetNoStore()

答案 2 :(得分:2)

会话 ;他们只是缓存。

您可以尝试强制刷新页面(ctrl + f5)并检查它。

答案 3 :(得分:1)

你得到了解决方案。实际上我用toke登录我的模块,令牌超时为5秒。如果我在5秒之前注销并单击浏览器的后退按钮,则再次调用glowal.ascx.cs的Session_Start()事件并再次读取令牌并再次创建会话。如果我在5秒后单击后退按钮,则会话不会创建。为了解决这个问题,我不允许用户通过浏览器返回。为此,我使用了以下代码

<script type="text/javascript">
history.go(1);
</script>