我们的问题是我们能够在注销时清除会话。
但是,如果用户点击后退按钮,则他/她可以浏览所有先前的屏幕。
但优点是,只需点击任何此类冲浪页面,用户就可以登录页面,我们就是这样做的。但我们的要求是我们不应该允许用户浏览之前的冲浪页面。
答案 0 :(得分:12)
您需要强制缓存过期才能生效。我正在为你寻找代码示例。
修改强>
为您找到了这个,它已经在SO上解决了。
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
答案 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)
同一问题/答案的早期变体:
Is there a way to keep a page from rendering after a person has logged out but hit the "back" button
答案 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();
}