通過研究CDN緩存登錄信息問題對WP Super cache的一些新的領(lǐng)悟
編輯:狂族晨曦 來源:WordPress技巧 日期:2016-04-13 閱讀: 6,399 次 11 條評論 » 百度已收錄
先森之前也發(fā)文提到過,網(wǎng)站已經(jīng)接入百度云加速,開啟了全站緩存。先森使用了兩天之后,感覺很不錯,就把體驗的結(jié)果寫了一篇文章發(fā)布了。但是突然又發(fā)現(xiàn),先森終于用到了讓很多站長頭疼的動態(tài)數(shù)據(jù)的問題。
先森發(fā)現(xiàn),CDN開啟網(wǎng)頁HTML緩存之后,一篇文章在沒有緩存的情況下,如果第一次訪問是先森自己訪問的,那CDN緩存的時候,就會把先森登錄后顯示的界面緩存下來。也就是訪客訪問的時候,會顯示“內(nèi)容管理”、“登出”、評論框會顯示先森的頭像,前面兩個因為沒有登錄,所以點擊之后也沒有用,但是評論框顯示先森的頭像的時候,沒有更改昵稱和郵箱的選項,當(dāng)訪客寫好評論提交的時候會提示“請輸入昵稱和郵箱”。先森的網(wǎng)站本來評論就少,這樣一來豈不是更收不到評論了。

動態(tài)判斷內(nèi)容被緩存
為了解決這個問題,暫時又沒找到合適的解決方法,只得把CDN的緩存HTML給關(guān)了。在找解決方法的時候,先森又回頭研究WP Super Cache,這次對WP Super Cache又有了新的領(lǐng)悟,所以趕緊寫篇文章記錄一下。
對WP Super Cache新的領(lǐng)悟
1.WP Super Cache有兩種緩存機制
WP Super Cache 設(shè)置->內(nèi)容里面,點擊列出所有已緩存的文件網(wǎng)頁會刷新出一個顯示框,里面有“最新的 WP-Cached 文件”和“最新的 Super Cached 文件”。之前先森以為都是沒有什么區(qū)別,或者說沒弄明白有什么區(qū)別。

WP Super Cache的兩種緩存
經(jīng)過一番研究終于搞明白,WP Super Cache緩存的內(nèi)容有兩種,一種是對已知用戶的,一種是對未知用戶的。這兩種緩存文件放置的位置和格式都不相同。
其實這一點,先森也發(fā)現(xiàn)WordPress大學(xué)中,倡萌早有提及。倡萌的介紹比先森自己寫的更規(guī)范易懂,但先森也發(fā)現(xiàn)有些描述也與現(xiàn)在的插件不吻合了,所以先森自己重新引用整理一下,讓先森自己和更多的人看明白:
WP Super Cache 緩存機制有兩種,WP Cache 和 Super Cache。
WP Cache 緩存時,會在你的“wordpress 安裝文件夾/wp-content/cache/”文件夾下生成一系列wp-cache-xxxxxx.php格式的文件。而且先森發(fā)現(xiàn),每個不同的已知用戶即使他們訪問同一個頁面,都為單獨的為他們緩存一個新的文件,因為他們的昵稱、郵箱、網(wǎng)址是不同的;

為已知用戶緩存
Super Cache 緩存時,則在你的“wordpress 安裝文件夾/wp-content/cache/supercache/”文件夾下生成對應(yīng)每一篇文章或者標(biāo)簽等的目錄。名稱為xxx.html,取決于你的文章ID是怎么設(shè)置。目錄下面就是靜態(tài)的 index.html 文件。

為未知用戶緩存
當(dāng)你一個訪問者來的你的站點,他沒有登錄或者也沒有留言,這樣他得到是一個在 WordPress cache 文件夾下的 supercache 子文件夾下的純靜態(tài)文件,其實你都可以自己到上面的 supercache 目錄下去查看同樣的永久鏈接的 HTML 文件的備份。
如果要判斷一個頁面是否已經(jīng)被緩存了,在頁面中右鍵查看該頁面的源代碼,最后一行會有“Cached page generated by WP-Super-Cache+緩存時間”這行字,就像下面這行代碼一樣:
<!-- Dynamic page generated in 0.840 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2016-04-13 17:48:08 -->
而如果你開啟了壓縮頁面,緩存會多一行如下代碼:
<!-- Compression = gzip -->

判斷網(wǎng)頁是否被WP Super Cache緩存
2.WP Super Cache高級設(shè)置雜項中的兩個設(shè)置的作用
搞明白了WP Super Cache的兩種緩存機制之后,加上CDN緩存HTML出現(xiàn)的問題,先森又對WP Super Cache高級設(shè)置里,雜項的兩個設(shè)置的作業(yè)有了領(lǐng)悟。

兩個雜項設(shè)置的作用
上圖紅框中的兩個設(shè)置,以前先森不知道這兩個設(shè)置所對應(yīng)的情景是怎樣的,現(xiàn)在終于有所感悟了。
“不要為已知用戶緩存”的作用。很明顯,開啟之后,在“wordpress 安裝文件夾/wp-content/cache/”文件夾下就不會生成一系列wp-cache-xxxxxx.php格式的文件了。在開啟CDN緩存HTML文件后,緩存期內(nèi),誰第一個訪問一個頁面,后來者顯示的都是他打開后顯示的頁面。所以即使繼續(xù)為已知用戶緩存,他們也訪問不到為他們單獨緩存的界面。因此,勾選這個選項就很有必要了。
“讓已知用戶匿名使他們?yōu)g覽的內(nèi)容是緩存文件”的作用。上面也說了,開啟CDN緩存HTML文件后,緩存期內(nèi),誰第一個訪問一個頁面,后來者顯示的都是他打開后顯示的頁面。而產(chǎn)生這個問題的原因,就是WordPress會記住評論者的信息,這些人就成為了WP Super Cache中的已知用戶,他們在打開文章的時候,會自動填上昵稱、郵箱等內(nèi)容。而勾選了這個選項之后,這些已知用戶訪問頁面的時候,會強制匿名,讓他們也成為未知用戶。
其實勾選這兩個設(shè)置之后,基本能解決CDN緩存昵稱、頭像的問題,但是這樣也導(dǎo)致了已知用戶們每次訪問都會重新輸入一系列信息,對用戶體驗非常之不好。對于這一點,先森也大致找到了解決方法,等研究好了再分享出來。
2016年4月22日更新
針對CDN緩存問題,先森將近期的解決方法更新上來,有興趣的朋友可以去看看:
3.緩存的機制
這一點的名字可能很多人會沒看懂,其實先森是自己進入了一個牛角尖,沒有對緩存的機制徹底領(lǐng)悟。先森一直在想,WP Super Cache是怎么做到讓訪客訪問的"www.域名.com/*.html"加載的內(nèi)容變成“www.域名.com/wp-content/cache/supercache/*.html”的呢?也就是怎么讓頁面的內(nèi)容直接訪問到緩存的內(nèi)容。
開始先森在想,是不是301跳轉(zhuǎn)什么的,先森記得有個什么隱形跳轉(zhuǎn),就是鏈接不變,內(nèi)容變了。后來先森想明白了,WP Super Cache會將規(guī)則寫入.htaccess中,用這個規(guī)則進行訪問緩存文件。
可能有人會對這第三點感到很不屑,但是先森覺得自己弄明白了一件事,還是非常高興的。
轉(zhuǎn)載請注明出處來自http://www.cnidcc.cn/tgyjcdnhcdlxxwtd_wpsupercache_dyxxdlw.html

川公網(wǎng)安備 51011202000104號
htaccess里有規(guī)則,重寫了。
@免費資源部落: 哇,小站終于迎來了第一位我所熟知的名博博主,感謝光臨。
“其實勾選這兩個設(shè)置之后,基本能解決CDN緩存昵稱、頭像的問題,但是這樣也導(dǎo)致了已知用戶們每次訪問都會重新輸入一系列信息”,這個找到方法了嗎?用百度cdn設(shè)置所有都緩存后,“誰第一個訪問一個頁面,后來者顯示的都是他打開后顯示的頁面。登錄狀態(tài)都被緩存了…”
@龍笑天: 這個找到了的,在這里:用cookie解決網(wǎng)站開啟CDN緩存之后已知用戶頭像昵稱被緩存等系列問題//www.cnidcc.cn/ycookiejjwzkqcdnhczhyzyhtxncbhcdxlwt.html
@狂族晨曦: 嗯,看到了,總感覺不大好(登錄者會變成沒登錄了),就沒弄,只開啟了cdn的細(xì)致緩存。ps:你博客的表情圖標(biāo)插入不了,F(xiàn)irefox 28。
@龍笑天: 這個就見仁見智了,根據(jù)自己的需求設(shè)置了。
剛才測試了一下,火狐確實有問題,點擊表情都新窗口打開空白頁。我解決一下,謝謝提醒。
我開始用w3tc來緩存!
棄用wp super cache了,我的流量太少,沒必要用那個了。
俺哪里開啟的是整站CDN緩存,時間設(shè)置不是很長。
w3tc比這個強大些,我感覺wsc是用過最笨重的一個,可為啥所有人都在推這個插件?