最近遇到一個問題,一個ajax請求會呼叫已存在的session,再依據session做一些處理。發現session有時候有生效有時候沒生效。
session是儲存到db的,所以不存在存取不同伺服器導致session不一致的問題。
頁面使用了varnish,一開始以為是varnish 快取了頁面,導致請求沒有執行到php,而是使用了http快取。後來清除了varnish,依然有這個問題。
我又清理了下請求的頁面,發現頁面的header的簡繁體鏈接用的是html後綴,這個可能是緩存HTML,導致點了這個header的link生成的頁面實際上並不會生成session。而這個快取頁面的ajax自然就沒有session可以取得了。
好。解決方法來了:
1 將session的參數帶入ajax,每次請求都帶上,這樣就不用依賴session來處理。
2 將html改為php。但如果用了varnish或其他快取技術,也有可能會導致上述問題。因此,最好還是用第一個辦法,不依賴session。