[英]php store session in redis
我想使用 Redis 來存儲/檢索 PHP 中的 session,所以我創建了一個像這樣的新處理程序:
class RedisSessionHandler implements SessionHandlerInterface
{
public $ttl = 1800; // 30 minutes default
protected $db;
protected $prefix;
public function __construct(PredisClient $db, $prefix = 'PHPSESSID:') {
$this->db = $db;
$this->prefix = $prefix;
}
public function open($savePath, $sessionName) {
// No action necessary because connection is injected
// in constructor and arguments are not applicable.
}
public function close() {
$this->db = null;
unset($this->db);
}
public function read($id) {
$id = $this->prefix . $id;
$sessData = $this->db->get($id);
$this->db->expire($id, $this->ttl);
return $sessData;
}
public function write($id, $data) {
$id = $this->prefix . $id;
$this->db->set($id, $data);
$this->db->expire($id, $this->ttl);
}
public function destroy($id) {
$this->db->del($this->prefix . $id);
}
public function gc($maxLifetime) {
// no action necessary because using EXPIRE
}
}
我將它設置為處理程序
$db = new PredisClient();
$sessHandler = new RedisSessionHandler($db);
session_set_save_handler($sessHandler);
session_start();
在一個真實的應用程序中,我使用的是 DI,並且我有一個SessionMiddleware
,我在其中設置和啟動 session
我收到如下錯誤: Warning: session_start(): Failed to read session data: user (path: )
這是否意味着我仍然需要在 ini 文件中設置session.save_path = tcp://127.0.0.1:6379
? 對我來說這沒有任何意義,因為我將 Redis 實例傳遞給自定義處理程序
我找到了解決方案,您需要在 PHP 7.2 和更新的 https 中的read
方法中返回空字符串://www.php.net/manual/en/function.session-start.php#120589
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.