問題原因
緩存了包含敏感 cookie 的響應:cloudflare 默認會緩存某些 http 響應,如果響應中包含 set-cookie 頭部,可能導致 cookie 被錯誤緩存。
邊緣節點存儲了過期 cookie:cloudflare 邊緣節點可能存儲了舊的 cookie 值,導致用戶收到不一致的 cookie
緩存規則配置不當:錯誤的頁面規則或緩存級別設置可能導致 cookie 相關內容被緩存。
解決方案
1.調整緩存設置
在 cloudflare 儀錶板中,為包含 cookie 的頁面或 api 端點設置 cache level:bypass
使用頁面規則排除敏感路徑:https://example.com/account/* 設置 cache level:bypass
2.添加適當的緩存頭
確保您的源伺服器發送正確的緩存控制頭:
cache-control:no-cache="set-cookie"cache-control:private
3.使用 edge 緩存標籤
對於需要部分緩存但又要處理 cookie 的情況:
cache-tag:static-content
4.檢查 cookie 配置
確保 cookie 的 secure 和 httponly 標誌設置正確。
考慮使用 samesite 屬性防止 csrf 攻擊。
5.清除 cloudflare 緩存
如果問題已經發生:
登錄 cloudflare 儀錶板。
導航到 "caching" >"purge cache"
選擇 "purge everything" 或指定 url 清除。
最佳實踐
對需要身份驗證的頁面完全禁用緩存。
為動態內容和靜態內容設置不同的緩存策略。
定期檢查 cloudflare 的緩存規則配置。
使用 cloudflare 的 "cache analytics" 監控緩存命中情況。
通過合理配置 cloudflare 緩存策略和正確設置 http 頭部,可以有效解決因緩存導致的 cookie 問題,同時保持網站性能優勢。