如何防止注销用户使用asp.net中的后退按钮重新访问上一页?

Mri*_*Raj 1 c# asp.net back-button browser-history

我的asp .net应用程序面临一个问题,即注销用户使用浏览器的后退按钮重新访问以前访问过的页面.用户无法执行任何服务器端事件,但如果不允许用户查看此页面会更好.我搜索了一个解决方案来阻止这个,但大多数解决方案包括在页面内编写代码,必须不像这样重新访问.

 protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            string sb;
            sb = "<script language=javascript>\n";
            sb += "window.history.forward(1);\n";
            sb += "\n</script>";
            ClientScript.RegisterClientScriptBlock(Page.GetType(), "clientScript", sb);
        }
Run Code Online (Sandbox Code Playgroud)

这意味着我必须在登录用户可以访问的每个页面中编写代码.有没有更好的方法来处理这个问题?我期待一个优化的解决方案,我不必在每个页面编写代码.将非常感谢帮助.

Bla*_*hma 5

根据您的问题,我了解您只想阻止使用"后退"按钮(查看以前的数据),但是您的服务器端正常工作并且不允许已注销的用户执行任何任务...

如果不是这种情况,您还应该在服务器端添加验证,以确保注销用户(应该被视为从未登录过的用户)无法执行任何需要权限的操作......!

回到你的问题 - 你应该在浏览器中禁用缓存.

在CodeBehind中:

Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Run Code Online (Sandbox Code Playgroud)

您还可以在ASPX页面中使用META标记:

 <META Http-Equiv="Pragma" Content="no-cache">
 <META Http-Equiv="Expires" Content="0">
 <META Http-Equiv="Cache-Control" Content="no-cache">
Run Code Online (Sandbox Code Playgroud)

这将告诉浏览器该页面不应该被缓存,也不会通过Back按钮重新显示

如果这还不够,您还可以使用JavaScript来清除历史记录,这里有一个例子

编辑: 如果您希望此代码只出现一次,您可以创建一个具有此逻辑的BasePage(源自Page).然后,您想要此逻辑的任何页面都应该来自BasePage而不是常规System.Web.UI.Page