前言
小型web服務(wù), session數(shù)據(jù)基本是保存在本地(更多是本地磁盤文件), 但是當部署多臺服務(wù), 且需要共享session, 確保每個服務(wù)都能共享到同一份session數(shù)據(jù).
redis 數(shù)據(jù)存儲在內(nèi)存中, 性能好, 配合持久化可確保數(shù)據(jù)完整.
設(shè)計方案
1. 通過php自身session配置實現(xiàn)
1. 通過php自身session配置實現(xiàn)
# 使用 redis 作為存儲方案
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
# 若設(shè)置了連接密碼, 則使用如下
session.save_path = "tcp://127.0.0.1:6379?auth=密碼"
測試代碼
<?phpini_set("session.save_handler","redis");
ini_set("session.save_path","tcp://127.0.0.1:6379");
session_start();
echo"<pre>";
$_SESSION['usertest'.rand(1,5)]=1;
var_dump($_SESSION);echo"</pre>";
輸出 ↓
array(2) {?
?["usertest1"]=>int(88)?
?["usertest3"]=>int(1)
}
usertest1|i:1;usertest3|i:1;
評價
優(yōu)點:?實現(xiàn)簡單, 無需修改php代碼
缺點:?配置不支持多樣化, 只能應(yīng)用于簡單場景
2. 設(shè)置用戶自定義會話存儲函數(shù)
通過?session_set_save_handler()?函數(shù)設(shè)置用戶自定義會話函數(shù).
session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp ]]] ) : bool
? ? # >= php5.4
session_set_save_handler ( object $sessionhandler [, bool $register_shutdown = TRUE ] ) : bool
在配置完會話存儲函數(shù)后, 再執(zhí)行?session_start()?即可.
具體代碼略, 以下提供一份?Memcached?的(來自Symfony框架代碼):