清除asp.net Web应用程序的缓存无法按预期工作

时间:2015-08-05 19:54:04

标签: asp.net vb.net caching

我有一个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"/>

然而,该应用程序仍然允许用户查看在上述场景中输入的所有表单数据(在提交表单然后点击后退按钮之后)。我还需要做些什么来防止这种情况发生?

3 个答案:

答案 0 :(得分:0)

处理表单的ViewState应该是一个解决方案

http://www.w3schools.com/aspnet/aspnet_viewstate.asp

答案 1 :(得分:0)

您的问题与浏览器缓存(如您所提到的)有关,但与您关闭浏览器并返回时使用的商店无关;我以前处理过它,它似乎被视为内存类型缓存 - 奇怪的行为,我知道。通常回击将完全按原样填充输入 - 你可以说,因为页面几乎立即呈现,因为它没有做任何服务器工作。

作为一种变通方法,您可以在页面加载时始终使用javascript清除输入。这将始终运行(即使从缓存渲染)

答案 2 :(得分:0)

我收到的第一个回复在我的情况下并没有用,因为我必须保留视图状态而不是禁用它。

所以我尝试了第二个响应中建议的javascript解决方法。我不清楚输入本身,但我有每个页面加载运行的JavaScript代码。它比较了一些变量的初始值(首次加载页面时从服务器初始化),以及保存在cookie中的当前值。如果存在差异,我会向用户提供错误消息并强制他们重定向到特定页面。

代码看起来像这样:

    var originalID = '<%= GetMyID() %>';
    var cookieID = getCookie('MyID');

    if (cookieID!= originalID) {
        showMessage();
    }

理想情况下,当按下后退按钮时,我仍然希望能够使缓存无效,但我仍然不知道如何做到这一点。