頁面緩存雖能提升載入速度,但在某些場景下(如交易流程、即時數據展示)卻會造成嚴重問題。PHP 提供了多種 HTTP 標頭組合,能徹底禁用瀏覽器緩存,確保用戶每次請求都獲取最新內容。
在輸出任何內容前,呼叫以下 header() 即可:
<?php
// 1. 設定過期時間為過去日期(GMT)
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// 2. Last-Modified 設為當下,強制瀏覽器重新驗證
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// 3. HTTP/1.1:禁止緩存且必須重新驗證
header("Cache-Control: no-cache, must-revalidate");
// 4. HTTP/1.0 相容:Pragma 標頭
header("Pragma: no-cache");
?>
若需更嚴格防止用戶按「返回鍵」重送表單,可加入 no-store 並簡化過期時間:
<?php
header("Cache-Control: no-cache, must-revalidate, no-store"); // Firefox 需 no-store
header("Pragma: no-cache");
header("Expires: -1");
?>
搭配伺服器端 Session 判斷(如購物車為空即導向空車頁),即可徹底阻斷「回上頁」導致的重複下單風險。
記得:所有 header() 必須在任何輸出(含空白、BOM)之前呼叫,否則會觸發「Headers already sent」錯誤。