2009-12-23 135 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>