我的 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);
}
这意味着我必须在登录用户可以访问的每个页面中编写代码。 有没有更好的方法来处理这个问题?我期待一个优化的解决方案,这样我就不必在每个页面上都编写代码。帮助将不胜感激。
最佳答案
根据您的问题,我了解到您只是想阻止使用“后退”按钮(查看以前的数据),但是您的服务器端工作正常并且不允许注销的用户执行任何任务...
如果不是这种情况,您还应该在服务器端添加验证以确保已注销的用户(应该像从未登录过的用户一样对待)不能这样做任何需要权限的东西...!
回到您的问题 - 您应该在浏览器中禁用缓存。
在代码隐藏中:
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
您还可以在 ASPX 页面中使用 META 标签:
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">
<META Http-Equiv="Cache-Control" Content="no-cache">
这将告诉浏览器该页面不应该被缓存并且不会通过后退
按钮重新显示
如果这还不够,您还可以使用JavaScript 来清除历史记录, here is an example
编辑:
如果您希望此代码只出现一次,您可以创建一个具有此逻辑的 BasePage
(派生自 Page
)。然后,任何您想要此逻辑的页面都应该派生自 BasePage
而不是常规的 System.Web.UI.Page
关于c# - 如何防止注销用户使用 asp .net 中的后退按钮重新访问上一页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14537085/