PHP多機實現session共享


博主小菜一枚,關於session共享只是略知一二,后來被人問起,內心忐忑,語無倫次,之后看過幾篇文章后,心中安定,特此記錄。

基礎說明

session是服務器與客戶端進行信息交互用於驗證身份的一種方式,用於存儲客戶端的一些信息數據,php默認session存儲方式為服務器本地的文件,具體配置如下:

session.save_handler = files #默認為文件存儲方式
session.save_path ="D:/wamp/tmp"#session文件存儲地址
session.name = PHPSESSID #存儲到cookie的sessionID,每次客戶端訪問服務器,都會帶着客戶端本地的cookie信息發送到服務器

其他詳細配置,可以參考php.ini,這里不過多詳細說明

設計思路
單機服務器都是將session信息默認存儲到自己的本地,當多台部署時,需要一個公用的session服務,保證每個服務器都可以通過公用服務獲取到session信息,公用服務方式可以是文件,緩存,數據庫,或者專門用於session共享服務的工具等等;
這里主要說明一下redis;
redis屬於高性能服務,運行於內存,支持多種數據結構類型非常適合用於存儲session信息,同事redis還有定時將內存數據固化到磁盤的功能,這在服務宕機,數據恢復方面也提供了便利,如果用memcache,則需要定時任務執行數據備份腳本;

設計方案:
一、通過php自身的session配置實現
session.save_handler = redis#配置為redis
session.save_path ="tcp://127.0.0.1:6379"#如果redis設置了密碼則:session.save_path = "tcp://redis服務地址:端口?auth=密碼"
該方案由於配置不支持多樣化,只能用於用戶少量時的應用。

二、通過框架擴展session應用,這里不貼具體代碼實現,主體思路是用戶所有請求均通過框架單一入口文件(現在流行框架都是這樣設計),通過框架進行session擴展,開發者通過編碼可以自由選擇session存儲機制,數據備份機制,數據恢復機制,
數據讀取規則等;大體思路為session擴展類需要對外提供session信息的訪問,存儲,修改。session服務可以通過配置文件實現不同的架構設計,具體設計有hashMap等。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM