2012-04-01 104 views
2

這是Google中一個非常有名的問題。我發現了幾個建議來實現這個功能。我已經實施的程序描述如下:註銷後防止頁面回顧

我在主頁上添加了一個註銷鏈接,並單擊該鏈接我將用戶重定向到註銷頁面。

protected void LinkButton1_Click(object sender, EventArgs e) {  
    Response.Redirect("../Logout.aspx"); 
} 

現在在Logout.aspx我已經加入:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1)); 
Response.Cache.SetNoStore(); 
Response.AppendHeader("Pragma", "no-cache"); 
在Page_Load方法的代碼

後面。

此外,我已經添加了asp:ScriptManagerasp:TimerLogout.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick" > 
</asp:Timer> 

的Timer1_Tick方法是:

protected void Timer1_Tick(object sender, EventArgs e) { 
    FormsAuthentication.SignOut(); 
    Session.Abandon(); 
    FormsAuthentication.RedirectToLoginPage(); 
} 

這是從Logout.aspx重定向到Login.aspx。此外,我已經添加下面的JavaScript方法在Logout.aspx

function disableBackButton() { 
    window.history.forward(1); 
} 
disableBackButton(); 
window.onload = disableBackButton(); 
window.onpageshow = function (evt) { if (evt.persisted) disableBackButton() } 
window.onunload = function() { void (0) } 

而且它的工作,只有當我單單擊後退按鈕,或者點擊多次與暫停。但是,如果連續點擊多次,那麼我將再次進入主頁。

我該如何解決這個問題?

回答

1

我使用以下注銷,在那裏我清除cookie,並且我沒有任何問題登錄出我的用戶「真實」。

編輯

注意的是,瀏覽器緩存經常在其歷史上的頁面,我不認爲你可以阻止他們的頁面,註銷後!

FormsAuthentication.SignOut(); 
Session.Abandon(); 

// clear authentication cookie 
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, ""); 
cookie1.Expires = DateTime.Now.AddYears(-1); 
Response.Cookies.Add(cookie1); 

// clear session cookie 
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", ""); 
cookie2.Expires = DateTime.Now.AddYears(-1); 
Response.Cookies.Add(cookie2); 

FormsAuthentication.RedirectToLoginPage(); 
+0

非常感謝。這是一個有用的方法,我將使用它。但是這並不能解決我的問題。有什麼辦法可以徹底清除緩存或禁用它。 – 2012-04-01 16:40:23

+0

它已經解決了。我爲主頁設置了no-cache(在Logout.aspx的Page_Load中使用了類似的過程)。也許我需要爲母版頁的Page_Load設置no-cache選項,因爲它是由主頁繼承的。我對嗎? – 2012-04-01 16:44:30

1

添加以下代碼到母版頁的Page_Load與問題描述的其他技術一起:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1)); 
Response.Cache.SetNoStore(); 
Response.AppendHeader("Pragma", "no-cache"); 

它將工作。

+0

謝謝你這麼多小吃,它可以幫助我...... – Pritesh 2012-08-06 12:55:35

+0

@Pritesh歡迎您。 – 2012-08-10 11:43:54