在 PHP 專案採用分散式部署時,Session 同步是核心挑戰之一。採用 Memcache 集中儲存 Session 是主流解決方案,本文整理三種主流配置方式,並提供完整驗證範例。
session.save_handler = memcache
memcache.hash_strategy = "consistent"
session.save_path = "tcp://127.0.0.1:11211"
多台 Memcache 伺服器以逗號分隔:tcp://192.168.1.10:11211,tcp://192.168.1.11:11211。優點:集中管理、效能最佳、無程式碼侵入;缺點:需重啟 PHP-FPM/Apache 生效。
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"
目錄級配置,適合虛擬主機無 php.ini 權限場景,但 Nginx 不支援,且效能略遜於方式一。
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");
需在 session_start() 前呼叫,彈性高但維護成本較大,不建議大型專案採用。
<?php
session_start();
$_SESSION['username'] = 'jb51.net';
echo 'Session ID: ' . session_id() . '<br>';
// 直接從 Memcache 讀取驗證
$m = new Memcache();
$m->connect('localhost', 11211);
$sessionData = $m->get(session_id());
echo 'Memcache 原始資料: ' . $sessionData . '<br>';
// 輸出範例:username|s:8:"jb51.net";
?>
memcache.hash_strategy = consistent 避免單點故障導致大量 Session 失效。memcached(注意 d 結尾)擴展替代舊版 memcache,支援更完善的二進制協議與 SASL 認證。Session 分散式儲存是微服務化遷移的關鍵一步,配置得當可無縫支援水平擴展,消除單點故障風險。