我有一个使用Forms身份验证的ASP.NET应用程序。当用户单击页面上的“注销”按钮时,它将运行以下代码。
FormsAuthentication.SignOut();
Response.Expires = 0;
Response.Cache.SetNoStore();
Response.AppendHeader("Pragma", "no-cache");
但是,用户仍然只需按后退箭头即可查看上一页,无需再次登录。我确信它与缓存的上一页有关。如何确保在返回时提示他们再次登录?
答案 0 :(得分:5)
Response.Cache.SetCacheability(HttpCacheability.NoCache);
答案 1 :(得分:1)
现在您知道为什么会收到消息,“您已经注销了。出于安全考虑,请关闭此浏览器窗口。”
没有缓存是一种解决方法。
倒数第二个解决方法是使用ajax来提取任何敏感信息 - 这将在后面的情况下再次运行,并且不应缓存信息。这是更多的连接和更多的延迟,但是由于现代浏览器缓存,除了诸如此类的解决方法之外,没有什么可以做的。
- 亚当
答案 2 :(得分:0)
虽然无法保证缓存,但这对我来说很有用
//Used for disabling page caching
HttpContext.Current.Response.Cache.SetExpires(
DateTime.UtcNow.AddDays(-1));
HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
HttpContext.Current.Response.Cache.SetRevalidation(
HttpCacheRevalidation.AllCaches);
HttpContext.Current.Response.Cache.SetCacheability(
HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();
在任何页面的OnInit()方法(可能通过使用基类)在您不希望用户能够缓存的任何页面上运行它。
但要小心,有些页面可能要求您允许缓存,例如在SSL页面上进行文件下载等。
我在某个地方找到了这个代码,如果我找到了链接,我会更新帖子。