在PHP 中管理用戶會話是構建動態網頁應用的核心之一。默認情況下,PHP 會話使用cookie 來在客戶端和服務器之間傳遞session ID。為了提升安全性、控制會話行為或遵守瀏覽器兼容性需求,我們可以使用session_set_cookie_params()函數來自定義會話cookie 的參數。本文將詳細介紹該函數的使用方法及最佳實踐。
session_set_cookie_params()用於在調用session_start()之前設置會話cookie 的相關參數。這些參數包括:
lifetime :cookie 的有效時間(秒)。設為0 表示在瀏覽器關閉時失效。
path :cookie 所在的有效路徑,默認是/ 。
domain :cookie 所在的有效域名。
secure :布爾值,指示是否僅通過HTTPS 傳輸該cookie。
httponly :布爾值,指示是否將cookie 設置為HttpOnly,防止通過JavaScript 訪問。
從PHP 7.3.0 起,還可以通過傳遞一個關聯數組來設置以上參數,更為靈活且可讀性更強。
以下是一個使用傳統方式設置cookie 參數的示例:
session_set_cookie_params(3600, "/", "m66.net", true, true); session_start();
在上述代碼中,cookie 設置為在1 小時後過期,只在m66.net域名及其子路徑有效,要求通過HTTPS 訪問,且不能通過JavaScript 訪問(增強安全性)。
對於更清晰的代碼結構,推薦使用數組方式設置cookie 參數:
session_set_cookie_params([ 'lifetime' => 3600, 'path' => '/', 'domain' => 'm66.net', 'secure' => true, 'httponly' => true, 'samesite' => 'Strict' ]); session_start();
注意: samesite參數是為了防止CSRF 攻擊。可設置為'Lax' , 'Strict'或'None' 。當使用'None'時, secure必須為true 。
啟用HTTPS :始終推薦使用HTTPS,並將secure設置為true ,避免session ID 被中間人攻擊截獲。
HttpOnly 防護XSS :開啟httponly能阻止JavaScript 訪問cookie,降低跨站腳本攻擊風險。
合理設置有效期:不建議設置過長的cookie 生命週期,一般控制在幾小時以內較為合理。
設置domain 與path :確保domain和path設置合理,避免cookie 洩露到不相關子域或路徑。
順序錯誤:必須在調用session_start()之前調用session_set_cookie_params() ,否則設置無效。
未啟用HTTPS :當使用secure => true時,必須通過HTTPS 訪問,否則瀏覽器不會發送該cookie。
瀏覽器兼容性問題: samesite設置在較老的瀏覽器可能不被支持,建議根據目標用戶群體決定是否使用。
相關標籤:
cookie