[精讚] [會員登入]

[PHP] 設置cache/no-cache

無論我的網頁怎麼設置meta,伺服器總是丟出no-cache

分享完整連結 //n.sfs.tw/m10537

分享連結 [PHP] 設置cache/no-cache@精讚
(文章歡迎轉載,請尊重版權註明連結來源)
2018-12-25 21:58:35 By 張○○

今天遇到一個問題:

無論我的網頁怎麼設置meta,伺服器總是丟出no-cache

我試著在 httpd.conf 中加入 cache的設置

<IfModule mod_headers.c>
  <filesmatch "\.(ico|flv|gif|swf|eot|woff|otf|ttf|svg)$">
  Header set Cache-Control "max-age=2592000, public"
  </filesmatch>
</IfModule>

無效

我在檔頭放了 meta

<meta http-equiv="Cache-control" content="public">

無效

...三個小時後

我發現要修改 php.ini

; 預設是 nocache,改成 public,如果要關掉cache的話,這裡設定成 nocache即可
session.cache_limiter = public

; 預設是 180 分,改成 43200 分(一個月) 這是最大值
session.cache_expire = 43200

然後重啟 apache就好了

然後,網站就壞了

後來我一直推敲,我想要有cache,但是不能給session cache,不然就會一直清不掉 session 登出也沒作用


後來我把 php.ini 的設定改回來

session.cache_limiter = nocache

 

修改 httpd.conf

<filesMatch "\.(php)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>


<filesMatch "\.(html|css|jpg|png|gif|ico|js)$">
  <ifModule mod_headers.c>
     Header set Cache-Control "max-age=2402000, public"
  </ifModule>
</filesMatch>

讓我的程式不 cache,但是其他的檔cache。正常了。搞了好久。

 

其他應注意事項

1. 如果有用 mod_expires,會由設定的順序決定。
2. 如果瀏覽器已經 cache,除非你強制清掉,否則他會到 expires 後才會讀取新的內容
3. php.ini 的 session cache 千萬別打開,如果已經打開,要清掉session 只能把目錄中的檔案殺掉,預設在 /var/lib/php/session/

 

END
你可能有興趣

[Rocky9] 安裝node.js 18, node.js 20

原本的nodejs16在使用 quasar dev時出現錯誤,得升級成18版以上

[SSL] Could not read certificate from server.cer 的錯誤排除

在轉換ssl憑證時,出現無法讀取的錯誤,可是怎麼看憑證都很正常,該怎麼解決?

[Linux] 如何能知道我是什麼時候安裝系統的?

linux想知道什麼時候裝系統的? 不必憑記憶。

地圖填色的網站

我們想為國家填色不需要小畫家,這個網站能幫助你

[Linux] 列出所有目錄及所占空間的方法

想知道目錄下的所有目錄所占的空間大小?

[Linux] grep 排除特定字串

使用 -v 參數可以讓grep排除特定字串的方法