博主小菜一枚,關於session共享只是略知一二,後來被人問起,心裏忐忑,語無倫次,以後看過幾篇文章後,心中安定,特此記錄。php
基礎說明redis
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,則須要定時任務執行數據備份腳本;
設計方案:
1、經過php自身的session配置實現
session.save_handler = redis#配置爲redis
session.save_path ="tcp://127.0.0.1:6379"#若是redis設置了密碼則:session.save_path = "tcp://redis服務地址:端口?auth=密碼"該方案因爲配置不支持多樣化,只能用於用戶少許時的應用。2、經過框架擴展session應用,這裏不貼具體代碼實現,主體思路是用戶全部請求均經過框架單一入口文件(如今流行框架都是這樣設計),經過框架進行session擴展,開發者經過編碼能夠自由選擇session存儲機制,數據備份機制,數據恢復機制,數據讀取規則等;大致思路爲session擴展類須要對外提供session信息的訪問,存儲,修改。session服務能夠經過配置文件實現不一樣的架構設計,具體設計有hashMap等。