❶ 詳解Session
Session是伺服器端用來維護客戶端會話狀態的一種機制,與Cookie類似,但針對HTTP協議的局限性設計。它常用於傳遞頁面變數、用戶認證和程序狀態記錄,如保持登錄狀態或記錄購物車信息。
啟用Session前需使用session_start()函數,務必在開始前避免輸出任何內容,否則會出現警告。php.ini中可以設置session.auto_start為1自動開啟Session。通過$_SESSION[]操作設置和獲取Session,每次請求會附帶一個PHPSESSID的Cookie,值為一個32位的16進制字元串,瀏覽器刷新時會重新生成。
Session的工作原理依賴於一個PHPSESSID的cookie,通過sessionID與伺服器上的session文件關聯。sessionID在HTTP請求和響應中傳輸,生成時確保唯一性和隨機性。默認情況下,Session文件存儲在伺服器硬碟,通過session.save_path設置路徑,可以自定義存儲方式,如使用Redis存儲以提高性能,減少I/O操作。
例如,可以編寫一個自定義session保存函數,如session_set_save_handler,通過Redis存儲。如sessionmanager類,定義open、close、read、write、destroy和gc等回調函數,分別對應會話的初始化、關閉、讀取、寫入、銷毀和垃圾回收操作。將session數據以鍵值對的形式存儲在Redis中,使用sessionID作為鍵,值為序列化後的數據。
在實踐中,創建和訪問Session的腳本,如set.php設置Session,get.php獲取Session內容,可以看到在Redis中存儲的session數據,形式與文件存儲類似,但鍵值對中的字元串做了轉義。