我有一个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操作中删除所有会话,但是当我单击浏览器的后退按钮时,它会返回到上一页并且会话仍然是活。有没有人有这个问题的解决方案。
答案 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>