Maison  >  Article  >  base de données  >  Explication détaillée de l'utilisation de Redis pour enregistrer les sessions utilisateur

Explication détaillée de l'utilisation de Redis pour enregistrer les sessions utilisateur

coldplay.xixi
coldplay.xixiavant
2020-07-30 10:57:043177parcourir

Explication détaillée de l'utilisation de Redis pour enregistrer les sessions utilisateur

Avant-propos

Mécanisme de stockage de peinture intégré à PHP est Enregistrez toutes les données de session dans des fichiers texte sur le serveur. Ces fichiers sont généralement stockés dans un répertoire temporaire sur le serveur. Si le degré de concurrence est important, l’efficacité de lecture et d’écriture est très faible. Redis prend très bien en charge la simultanéité élevée, vous pouvez donc utiliser Redis pour remplacer les sessions de stockage de fichiers.

Recommandations de sujets connexes : session php (y compris des photos, des vidéos, des cas)

Fonction session_set_save_handler

La fonction session_set_save_handler de PHP est utilisée pour définir des fonctions de sauvegarde de session au niveau de l'utilisateur (telles que l'ouverture, la fermeture, l'écriture, etc.). Le prototype est le suivant :

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。

Classe de gestion de session

Trouvez le fichier de configuration PHP php.ini, modifiez-le avec le contenu suivant, enregistrez et redémarrez le service php-fpm.

session.save_handler = redis

Nous écrivons une classe pour gérer les sessions :

<?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(&#39;127.0.0.1&#39;, 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 &#39;&#39;;
 }
 }

 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();
 }
}

Le constructeur SessionManager est principalement utilisé pour se connecter au serveur Redis, utilisez la fonction session_set_save_handler pour définir la fonction de rappel de session et appeler la fonction session_start Activez la fonction session. Étant donné que les fonctions de rappel open, close et gc dans cet exemple ne sont pas très utiles, elles renvoient directement true.

Dans la fonction de rappel d'écriture, utilisez l'ID de session comme clé, stockez les données de session comme valeur dans le serveur Redis et définissez le délai d'expiration de la session sur 30 secondes. Dans la fonction de rappel de lecture, utilisez l'ID de session comme clé pour lire les données du serveur Redis et renvoyer ces données. Dans la fonction de rappel destroy, l'ID de session est utilisé comme clé pour supprimer les données de session correspondantes du serveur Redis.

Utiliser la session

Créez d'abord un fichier set.php pour définir la session :

<?php 
require_once &#39;SessionManager.php&#39;;
new SessionManager();
$_SESSION[&#39;username&#39;] = &#39;helloweba&#39;;

Puis créez le fichier get.php pour obtenir la Session :

<?php 
require_once &#39;SessionManager.php&#39;;
new SessionManager();
echo $_SESSION[&#39;username&#39;];

Évidemment, on inclut d'abord la classe de gestion de session, puis après instanciation, on peut utiliser la fonction de session PHP normale.

Lors du test, accédez d'abord à set.php, puis accédez à get.php. Le résultat de sortie est le suivant :

Enfin, nous l'enregistrons. Résultat redis :

Recommandations d'apprentissage associées : Tutoriel vidéo redis

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer