[精讚] [會員登入]

[PHP] 設置cache/no-cache

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

此文完整連結 http://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/

 

你可能有興趣

[WIndows] 程式視窗的上緣跑到螢幕外面怎麼辦

這近不知怎麼搞的,我的EXCEL開啟時他最上面的選單跑到螢幕的外面 所以我也拉不回來,不知怎麼辦?

[PERL] 一個SQL上的錯誤

一個SQL上的觀念錯誤,浪費了我半小時查錯和半小時寫這篇筆記。

線上格式化/最小化你的javascript 程式碼

我想用編輯器來格式化javascript,試了二三套,還是覺得線上的這個最好

[HTML/CSS] PER標籤中要折字換行(PRE中防止容器破壞)

在pre中因為不會自動的換行,如果一行的內容很長,就會把容器撐開,要防止容器被長文字破壞的方法

GITHUB 要如何設定下載的分枝branch

我希望別人clone或pull時自動會下載我的分枝,你得指定一個預設的分枝