我有一个asp.net Web应用程序(vb.net),其中包含用户输入敏感数据的某些页面。提交页面后,我真的不希望用户能够点击“返回”按钮并返回到预填充数据的同一页面。
我阅读了几篇关于如何禁用“后退”按钮的帖子,大多数人说最佳做法是单独留下“后退”按钮,然后通过设置相应的缓存头来清除缓存。因此,在我的应用程序的母版页中,我包含了以下页面标题:
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="no-cache, no-store"/>
然而,该应用程序仍然允许用户查看在上述场景中输入的所有表单数据(在提交表单然后点击后退按钮之后)。我还需要做些什么来防止这种情况发生?
答案 0 :(得分:0)
处理表单的ViewState应该是一个解决方案
答案 1 :(得分:0)
您的问题与浏览器缓存(如您所提到的)有关,但与您关闭浏览器并返回时使用的商店无关;我以前处理过它,它似乎被视为内存类型缓存 - 奇怪的行为,我知道。通常回击将完全按原样填充输入 - 你可以说,因为页面几乎立即呈现,因为它没有做任何服务器工作。
作为一种变通方法,您可以在页面加载时始终使用javascript清除输入。这将始终运行(即使从缓存渲染)
答案 2 :(得分:0)
我收到的第一个回复在我的情况下并没有用,因为我必须保留视图状态而不是禁用它。
所以我尝试了第二个响应中建议的javascript解决方法。我不清楚输入本身,但我有每个页面加载运行的JavaScript代码。它比较了一些变量的初始值(首次加载页面时从服务器初始化),以及保存在cookie中的当前值。如果存在差异,我会向用户提供错误消息并强制他们重定向到特定页面。
代码看起来像这样:
var originalID = '<%= GetMyID() %>';
var cookieID = getCookie('MyID');
if (cookieID!= originalID) {
showMessage();
}
理想情况下,当按下后退按钮时,我仍然希望能够使缓存无效,但我仍然不知道如何做到这一点。