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