2015-01-02 151 views
3

我需要知道如何清除會話註銷MVC 4asp.net 我已經嘗試了幾乎所有的東西,但都是徒勞的。註銷MVC清除會話4

[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();
清除餅乾
組會議爲NULL,註銷等

,但是當我點擊瀏覽器的後退按鈕。它重定向到相同的帳戶。 請幫助我,當我點擊註銷按鈕時,我將如何清除會話變量。 我嘗試了上述的每一個,然後在組中,但結果相同。

+0

請多指點一下..認證類型,cookie類型?你可以檢查你是否清除了所有的cookies?您可以使用瀏覽器檢查器檢查。 –

+0

告訴您登錄索引操作 –

回答

1

當您點擊瀏覽器後退按鈕時,它不會從服務器獲取緩存中的頁面。但用戶將無法在後退按鈕後顯示的頁面上執行任何操作。

如果你仍然想要頁面不應該顯示,你應該刪除緩存。這是最佳做法。這是代碼。 (中的Global.asax.cs文件寫入)

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

編寫這些代碼的用戶將不會看到按後退按鈕後前一頁後。

上面編寫的用於清除會話對象的代碼是正確的。無需改變任何事情。

2

當用戶點擊後退按鈕時,瀏覽器顯示頁面的緩存版本,這正是用戶在第一次下載該頁面時看到的。但是,根本沒有聯繫服務器來顯示該頁面的緩存版本。該頁面的緩存版本將與下載完全一致,因此您可以看到下載頁面時登錄的用戶。但是,這並不意味着用戶仍然登錄。

如果要避免用戶導航回到先前的緩存頁面,更簡單的方法是在用戶註銷時刪除瀏覽器的歷史記錄。你不能直接做到這一點,但有一個解決方法,可以給出相同的結果。運行這個JavaScript:

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

所以,你需要做的是用這個JavaScript返回一個頁面,並在您閱讀'new page url'你要插入你想要當他註銷將用戶重定向頁面。

當然,避免緩存,就像在Ravinder Singh的回答中是一個選項,但避免瀏覽器緩存所有頁面並不是一個好主意。