【问题标题】:Clearing the cache of an asp.net web application does not work as expected清除 asp.net Web 应用程序的缓存无法按预期工作
【发布时间】:2015-10-28 18:28:04
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net vb.net caching


    【解决方案1】:

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

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

    【讨论】:

    • 你是在建议我禁用视图状态吗?我不能这样做,因为在提交表单时,我将丢失所有输入的数据......我只希望在点击“返回”按钮时清除页面,而不是在常规的回发周期中。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我收到的第一个响应对我来说并不是很有用,因为我必须保留视图状态而不是禁用它。

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

      代码如下所示:

          var originalID = '<%= GetMyID() %>';
          var cookieID = getCookie('MyID');
      
          if (cookieID!= originalID) {
              showMessage();
          }
      

      理想情况下,我仍然希望能够在点击后退按钮时使缓存无效,但我仍然不知道该怎么做。

      【讨论】:

        猜你喜欢
        • 2013-02-06
        • 2018-06-05
        • 2020-10-20
        • 2021-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-24
        相关资源
        最近更新 更多