3

Firefox 似乎保存了整个页面状态,包括 javascript 变量和 DOM 的值,并在用户点击返回按钮时恢复它。如何防止这种行为?

服务器端的缓存被阻止:

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache,no-store,private,must-revalidate,max-stale=0,post-check=0,pre-check=0");
header("Pragma: no-cache");

页面上的所有表单都有autocomplete='off',所有隐藏的输入元素也有。 onload事件不会被触发。

有没有办法告诉 Firefox 在提交表单后完全忘记页面状态?在将强制页面重新加载的 onsbumit 处理程序中设置超时是一个坏主意,因为下一页可能会在不可预测的时间内做出反应。在长响应的情况下重新加载将中断请求。

如何重现:

<body>
  <form method='POST' action='http://httpbin.org/post' autocomplete='off'>
    <input type='text' placeholder='Enter something' name='data'  autocomplete='off'/>
    <input type='hidden' name='token' value='and_token_field_that_must_not_be_cached' autocomplete='off'/>
    <input type='submit' />
  </form>
  <span id='counter'></span>
  <script>
    var tick = 0;
    setInterval(function () {
      document.getElementById('counter').innerHTML = tick ++;
    }, 300);
  </script>
</body>

稍等,按提交,然后返回。FF 将显示与页面提交前相同的计数器值,Chrome 将重置它。

4

0 回答 0