如何在用户在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(); }
- 如何在ASP.NET / C#中获取客户端计算机名?
- 如何在asp.net web应用程序中调用javascript方法
- 从ASPX页面运行命令行,并将输出返回到页面
- Microsoft ASP.NET标识 – 具有相同名称的多个用户
- 测试请求的URL是否在Route表中
- System.Web.HttpException文件不存在 – 页面加载很好(ASP.NET)
- 如何更正“qual.employee_id = recruitment.employee_id”中的错误“无法将类型’int’隐式转换为’string’”; “?
- DotNetOpenAuth.Messaging – 协议错误:此消息的时间戳为{0},超出了将来允许的时钟偏差
- 如何在冗长的循环中使用服务器端变量更新客户端?