Vorwort
Der in PHP integrierte Malspeichermechanismus Alle Sitzungsdaten werden in Textdateien auf dem Server gespeichert. Diese Dateien werden normalerweise in einem temporären Verzeichnis auf dem Server gespeichert. Wenn die Parallelität groß ist, ist die Lese- und Schreibeffizienz sehr gering. Redis bietet eine sehr gute Unterstützung für hohe Parallelität, sodass Sie Redis verwenden können, um Dateispeichersitzungen zu ersetzen.
Empfehlungen zu verwandten Themen: PHP-Sitzung (einschließlich Bilder, Videos, Fälle)
session_set_save_handler-Funktion
Die Funktion session_set_save_handler von PHP wird zum Definieren von Funktionen zum Speichern von Sitzungen auf Benutzerebene (z. B. Öffnen, Schließen, Schreiben usw.) verwendet. Der Prototyp lautet wie folgt:
bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)
参数 | 描述 |
---|---|
open | 当session打开时调用此函数。接收两个参数,第一个参数是保持session的路径,第二个参数是session的名字。此回调函数操作成功返回 TRUE,反之返回 FALSE。 |
close | 当session操作完成时调用此函数。不接收参数。此回调函数操作成功返回 TRUE,反之返回 FALSE。 |
read | 以session ID作为参数。通过session ID从数据存储方中取得数据,并返回此数据。如果数据为空,可以返回一个空字符串。此函数在调用session_start 前被触发 |
write | 当数据存储时调用。有两个参数,一个是session ID,另外一个是session的数据 |
destroy | 当调用session_destroy 函数时触发destroy函数。只有一个参数 session ID,此回调函数操作成功返回 TRUE,反之返回 FALSE。 |
gc | 当php执行session垃圾回收机制时触发,此回调函数操作成功返回 TRUE,反之返回 FALSE。 |
Sitzungsverwaltungsklasse
Suchen Sie die PHP-Konfigurationsdatei php.ini, ändern Sie sie in den folgenden Inhalt, speichern Sie den PHP-FPM-Dienst und starten Sie ihn neu.
session.save_handler = redis
Wir schreiben eine Klasse zum Verwalten von Sitzungen:
<?php class SessionManager{ private $redis; private $sessionSavePath; private $sessionName; private $sessionExpireTime = 60;//redis,session的过期时间为30s public function __construct(){ $this->redis = new Redis();//创建phpredis实例 $this->redis->connect('127.0.0.1', 6379);//连接redis //$this->redis->auth("123456x");//授权 $retval = session_set_save_handler( array($this,"open"), array($this,"close"), array($this,"read"), array($this,"write"), array($this,"destroy"), array($this,"gc") ); session_start(); } public function open($path,$name){ return true; } public function close(){ return true; } public function read($id){ $value = $this->redis->get($id);//获取redis中的指定记录 if($value){ return $value; }else{ return ''; } } public function write($id,$data){ if($this->redis->set($id,$data)){//以session ID为键,存储 $this->redis->expire($id,$this->sessionExpireTime);//设置redis中数据的过期时间,即session的过期时间 return true; } return false; } public function destroy($id){ if($this->redis->delete($id)){//删除redis中的指定记录 return true; } return false; } public function gc($maxlifetime){ return true; } public function __destruct(){ session_write_close(); } }
Der SessionManager-Konstruktor wird hauptsächlich zum Herstellen einer Verbindung zum Redis-Server verwendet. Verwenden Sie die Funktion session_set_save_handler
, um die Sitzungsrückruffunktion festzulegen und aufzurufen die Funktion session_start
Schalten Sie die Sitzungsfunktion ein. Da die Callback-Funktionen open, close und gc in diesem Beispiel nicht sehr nützlich sind, geben sie direkt true zurück.
Verwenden Sie in der Funktion „Rückruf schreiben“ die Sitzungs-ID als Schlüssel, speichern Sie die Sitzungsdaten als Wert auf dem Redis-Server und legen Sie die Ablaufzeit der Sitzung auf 30 Sekunden fest. Verwenden Sie in der Leserückruffunktion die Sitzungs-ID als Schlüssel, um Daten vom Redis-Server zu lesen und diese Daten zurückzugeben. In der Destroy-Callback-Funktion wird die Sitzungs-ID als Schlüssel zum Löschen der entsprechenden Sitzungsdaten vom Redis-Server verwendet.
Sitzung verwenden
Erstellen Sie zuerst eine set.php-Datei, um die Sitzung festzulegen:
<?php require_once 'SessionManager.php'; new SessionManager(); $_SESSION['username'] = 'helloweba';
Dann erstellen die get.php-Datei, um die Sitzung zu erhalten:
<?php require_once 'SessionManager.php'; new SessionManager(); echo $_SESSION['username'];
Natürlich schließen wir zuerst die Sitzungsverwaltungsklasse ein und können dann nach der Instanziierung die normale Sitzungsfunktion von PHP verwenden.
Greifen Sie beim Testen zuerst auf set.php und dann auf get.php zu. Das Ausgabeergebnis lautet wie folgt:
Abschließend checken wir es ein redis Ergebnis:
Verwandte Lernempfehlungen: Redis-Video-Tutorial
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Verwendung von Redis zum Speichern von Benutzersitzungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!