我正在研究开发经典asp的Web应用程序。它在顶部菜单上有注销按钮,基本上执行以下操作
注销后,用户返回index.asp。但是,如果用户单击浏览器后退按钮,则会转到上一页。我不希望这种情况发生。我想要一条消息说他们已经注销了。我已经实施了以下步骤
1.在每页顶部添加Response.Expires=-1
和Response.CacheControl="no-cache"
。
2.在每个页面上,我正在检查会话对象,看它是不是空的。如果为空我正在创建一条消息,说明他们已经注销并需要再次登录。
现在,当用户在注销后单击后退按钮,而不是显示已注销的消息时,我在IE8上收到“网页已过期”消息。当用户在登录时单击某个页面上的后退按钮时,我会看到相同的行为。
任何想法如何更好地实现这一点。
感谢。
答案 0 :(得分:1)
您无法阻止用户按下。解决此问题的常见方案是POSTs目标服务器页面,该页面不显示输出,而是重定向到新位置(可以看到结果)。
答案 1 :(得分:1)
还有其他非缓存声明有时会有所帮助:
Response.Expires = 0
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
我之前读过(因此无法找到链接)将expires设置为-1会导致某些浏览器忽略它而不是立即过期。
即使添加这些额外的缓存控件也不会阻止某些浏览器在某些时候缓存某些内容。 FF经常忽略用户强制缓存重新加载,因此您在浏览器中会在一定程度上起作用。
关于您的“网页已过期”消息,这是(如上所述)浏览器试图阻止您重新提交POST数据的结果(并且可能会复制您上次执行的操作)。解决此问题并解决表单上的许多其他常见UI问题的最佳方法是POST回到同一页面,然后如果/当操作完成时,使用response.redirect到同一页面,可能使用URL编码的消息说“所有已成功完成”。这使您的用户可以刷新并帮助解决后退按钮问题,因为大多数浏览器现在都不会在其历史记录中存储正确的重定向页面。