2009-12-23 125 views
1

我有一个MVC应用程序,我必须注销。要我创建TE主页从MVC注销

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

回答

2

会话是而不是活了;他们只是缓存。

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

6

您在浏览器中访问的页面被缓存,具体取决于浏览器中的缓存设置。您需要防止ASP.net MVC中的缓存,以便它们不会被浏览器缓存。在完成之后,请尝试清除浏览器缓存并尝试重新加载页面。注销并尝试后退按钮。您应该收到一条消息,指出网页不再存在或其他内容。

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

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

,这真是个好主意,这样做呢?我应该在每个视图上明确设置这些吗?为什么这不是MVC应用程序的默认设置?.....这听起来像是一个合理的建议,但由于某些原因,除少数情况外,这似乎很奇怪。任何建议/意见? – VoodooChild 2010-12-17 07:08:14

16

如果您正在使用窗体身份验证,那么这是你在找什么...

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

心连心

1

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

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