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

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

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

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

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

编辑
找到了这个,它已经在SO上解决了。

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

这里…

在页面加载事件中将此代码写入母版页

 Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); Response.Cache.SetNoStore(); 

并在头部分的登录页面中编写此代码

  

你无法“禁用”后退按钮。 我看到有很多“技巧”可以清除后面的历史记录,但这些都是不可靠的,它们不能从浏览器到浏览器,甚至是浏览器版本到浏览器版本。

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

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

您可以使用Outlook Web Access样式,只需让JavaScript关闭当前窗口/选项卡即可。

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

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

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

同一问题/答案的早期变体:

有没有办法在一个人注销但是点击“后退”按钮后保持页面不被渲染

这是我在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(); }