这是Google的一个非常着名的问题。我找到了几个实现此功能的建议。我实施的程序如下所述:
我在主页中添加了一个Logout Link,点击该链接后我将用户重定向到了注销页面。
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:ScriptManager
添加了asp:Timer
和Logout.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();
}
这是从Login.aspx
重定向到Logout.aspx
。另外,我在Logout.aspx
中添加了以下JavaScript方法:
function disableBackButton() {
window.history.forward(1);
}
disableBackButton();
window.onload = disableBackButton();
window.onpageshow = function (evt) { if (evt.persisted) disableBackButton() }
window.onunload = function () { void (0) }
它正在工作,只有我单击“后退”按钮,或者单击多次暂停。但如果连续多次点击它,那么我将再次被放置在主页中。
我该如何解决这个问题?
答案 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();
答案 1 :(得分:1)
将以下代码添加到母版页的Page_Load以及问题中描述的其他技术:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1));
Response.Cache.SetNoStore();
Response.AppendHeader("Pragma", "no-cache");
它会起作用。