如何在用户在asp.net c中注销时禁用浏览器中的后退按钮

时间:2009-02-26 05:59:27

标签: c# asp.net

我们的问题是我们能够在注销时清除会话。

但是,如果用户点击后退按钮,则他/她可以浏览所有先前的屏幕。

但优点是,只需点击任何此类冲浪页面,用户就可以登录页面,我们就是这样做的。但我们的要求是我们不应该允许用户浏览之前的冲浪页面。

7 个答案:

答案 0 :(得分:12)

您需要强制缓存过期才能生效。我正在为你寻找代码示例。

修改
为您找到了这个,它已经在SO上解决了。

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)

Here...

答案 1 :(得分:10)

在页面加载事件

中的母版页中编写此代码
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();

并在头部

中的登录页面中编写此代码
<script type="text/javascript">
window.history.forward(-1);
</script> 

答案 2 :(得分:7)

您无法“禁用”后退按钮。我见过有很多“技巧”可以清除后面的历史记录,但是它们不可靠,它们无法在浏览器之间工作,甚至不能在浏览器版本到浏览器版本之间工作。

正如其他人所说,正确的方法是使缓存无效,以及服务器端验证,如果会话尝试重新发送数据,则会话不再有效。此外,Response.Redirect比回发更好,因为这会导致get而不是post。

答案 3 :(得分:2)

对于ASP.NET页面,您可以使用Response.CacheControl来控制页面在用户缓存中的存储方式。其他Web开发语言将使用类似的东西。

答案 4 :(得分:1)

您可以使用Outlook Web Access样式,只需让JavaScript关闭当前窗口/标签。

此外,您可以确保“注销”页面是回发。这会强制用户在大多数浏览器的“后退”按钮上重试回发,此时您可以检测到他们不再登录并可以将它们重定向回登录页面。

编辑:其他人提到了Response.Redirect。实际上,您可以将“注销”链接转到执行重定向的页面,并始终重定向到第二个“登录页面”。如果用户点击“返回”,他们将再次登陆重定向并将其放回原来的位置。

没有办法阻止浏览器历史记录,因此一起使用几种方法非常重要,不要为用户“不倒退”以确保应用程序的安全性。

答案 5 :(得分:1)

答案 6 :(得分:0)

这是我在Coding Solutions

上找到的解决方案 主页中的

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.ClearHeaders();
        Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
        Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1
        Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1
        Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1
        Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1
    }

控制LoginStatus

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