當使用 IE 瀏覽器的後退按鈕或 JavaScript 的 history.go(-1) 時,若頁面已啟用 session_start(),PHP 會送出防快取標頭,導致瀏覽器顯示「警告:網頁已過期」。以下提供三種解決方案。
<?php
session_start();
header("Cache-control: private"); // 必須在任何輸出之前
?>
private 表示僅允許私人快取(瀏覽器可快取),即可解決過期問題。
<?php
session_cache_limiter('private'); // 不清空表單,僅在 session 有效期內
session_start();
?>
session_cache_limiter 還有其他參數:
nocache:不快取,表單資料會清空。public:允許代理伺服器快取,行為如同未使用 session。找到 session.cache_limiter 設定值:
; 預設為 nocache
session.cache_limiter = nocache
改為:
session.cache_limiter = private
; 或
session.cache_limiter = none
修改後需重新啟動 Apache(或 PHP-FPM)生效。
方法二最簡單且不需修改伺服器設定,推薦在專案啟動檔(如 config.php)最開頭加入 session_cache_limiter('private'); 即可一勞永逸。