Informationen zur Implementierung des Hinzufügens von Redis zur Sitzung

不言
Freigeben: 2023-04-02 08:54:01
Original
1446 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich Beispiele für das Hinzufügen von Sitzungen zu Redis vorgestellt, Sitzungen im Detail vorgestellt und Codebeispiele bereitgestellt. Freunde in Not können sich auf

Sitzungsinformationen in Redis

Sitzung beziehen Einführung

Sitzung, auf Chinesisch oft als Konversation übersetzt, bezieht sich ihre ursprüngliche Bedeutung auf eine Reihe von Aktionen/Nachrichten, die einen Anfang und ein Ende haben, wie zum Beispiel das Abheben des Telefons, wenn Einen Anruf tätigen Die Abfolge der Vorgänge vom Wählen bis zum Auflegen kann als Sitzung bezeichnet werden. Manchmal können wir Wörter wie „Während einer Browsersitzung …“ sehen. Das Wort Sitzung wird hier in seiner ursprünglichen Bedeutung verwendet, die sich auf den Zeitraum vom Öffnen bis zum Schließen eines Browserfensters bezieht①. Am verwirrendsten ist der Satz „der Benutzer (Client) während einer Sitzung“, der sich auf eine Reihe von Aktionen des Benutzers beziehen kann (im Allgemeinen eine Reihe von Aktionen im Zusammenhang mit einem bestimmten Zweck, z. B. von der Anmeldung bis zum Kauf von Waren). . Der Online-Einkaufsprozess vom Bezahlen bis zum Abmelden wird manchmal als Transaktion bezeichnet. Manchmal bezieht er sich jedoch nur auf eine Verbindung oder auf die Bedeutung ①. Der Unterschied kann nur aus dem Kontext abgeleitet werden ②.

In diesem Artikel wird die chinesische „Browsersitzungsperiode“ verwendet, um die Bedeutung auszudrücken ①, der „Sitzungsmechanismus“ wird verwendet, um die Bedeutung auszudrücken ④, die „Sitzung“ wird verwendet, um die Bedeutung auszudrücken Bedeutung ⑤, und die spezifische „HttpSession“ wird verwendet, um die Bedeutung auszudrücken ⑥

Warum sollte SESSION im Cache gespeichert werden

Soweit Was PHP betrifft, liegt die von der Sprache selbst unterstützte Sitzung in Form einer Datei vor. Speichern Sie sie auf einer Festplatte und speichern Sie sie im angegebenen Ordner. Der gespeicherte Pfad kann in der Konfigurationsdatei oder mithilfe der Funktion session_save_path() festgelegt werden Das Programm hat jedoch Nachteile. Der erste ist, dass die Effizienz im System gering ist und die angegebene Sitzungs-ID durchsucht wird. was sehr ineffizient ist.
Das zweite Problem besteht darin, dass bei Verwendung mehrerer Server das Problem des Sitzungsverlusts auftreten kann (eigentlich wird die Sitzung auf anderen Servern gespeichert).
Natürlich kann das Speichern im Cache das oben genannte Problem lösen. Wenn Sie die PHP-eigene Sitzungsfunktion verwenden, können Sie den Sitzungsverarbeitungsprozess mit der Funktion session_set_save_handler() einfach neu steuern. Wenn Sie die Sitzungsreihenfunktionen von PHP nicht verwenden, können Sie selbst eine ähnliche Sitzungsfunktion schreiben. Dies ist das Projekt, an dem ich gerade arbeite. Es berechnet den Hash als Sitzungs-ID basierend auf der Mitte und dem Benutzer Bei jeder Anfrage muss die Sitzungs-ID hinzugefügt werden, um gültig zu sein (dies ist nicht erforderlich, wenn Sie sich zum ersten Mal anmelden. Die Sitzungs-ID wird zu diesem Zeitpunkt erstellt und an den Client zurückgegeben. Dies ist auch sehr praktisch). , prägnant und effizient. Natürlich spreche ich in diesem Artikel hauptsächlich über die „Manipulation von Dingen“ in PHPs eigener SESSION.

SESSION wird im Cache gespeichert

php speichert den Cache in Redis. Sie können die Konfigurationsdatei verwenden, um die Verarbeitung und Speicherung von zu ändern Natürlich können Sie die Funktion ini_set() auch zum Testen verwenden. Wenn es sich um eine Produktionsumgebung handelt, ist dies natürlich der Fall Es wird empfohlen, die Konfigurationsdatei zu verwenden.

Wenn Sie die Sitzung einfach in Redis ausführen möchten, können Sie den folgenden Code ausführen

<?php 
 
ini_set("session.save_handler", "redis"); 
 
ini_set("session.save_path", "tcp://localhost:6379"); 
 
session_start(); 
 
header("Content-type:text/html;charset=utf-8"); 
 
if(isset($_SESSION[&#39;view&#39;])){ 
 
  $_SESSION[&#39;view&#39;] = $_SESSION[&#39;view&#39;] + 1; 
 
}else{ 
 
  $_SESSION[&#39;view&#39;] = 1; 
 
} 
 
echo "【view】{$_SESSION[&#39;view&#39;]}"; 
 
//这里设置session.save_handler方式为redis,session.save_path为redis的地址和端口,设置之后刷新,再回头查看redis,会发现redis中的生成了sessionId,sessionId和浏览器请求的是一样的, 
 
  
 
//也可以使用 
 
Session_set_save_handler(‘open&#39;,&#39;close&#39;,&#39; read&#39;,&#39; write&#39;,&#39; destory&#39;,&#39; gc&#39;); 
 
//用法如下自定义一个Redis_session类 
 
<?php 
 
class RedisSession{ 
 
  private $_redis = array( 
 
    &#39;handler&#39; => null, //数据库连接句柄 
 
    &#39;host&#39; => null,  //redis端口号 
 
    &#39;port&#39; => null, 
 
  ); 
 
  public function __construct($array = array()){ 
 
    isset($array[&#39;host&#39;])?$array[&#39;host&#39;]:"false"; 
 
    isset($array[&#39;port&#39;])?$array[&#39;host&#39;]:"false"; 
 
    $this->_redis = array_merge($this->_redis, $array); 
 
  } 
 
  public function begin(){ 
 
    //设置session处理函数 
 
    session_set_save_handler( 
 
      array($this, &#39;open&#39;), 
 
      array($this, &#39;close&#39;), 
 
      array($this, &#39;read&#39;), 
 
      array($this, &#39;write&#39;), 
 
      array($this, &#39;destory&#39;), 
 
      array($this, &#39;gc&#39;) 
 
    ); 
 
  } 
 
  public function open(){ 
 
    $redis = new Redis(); 
 
    $redis->connect($this->_redis[&#39;host&#39;], $this->_redis[&#39;port&#39;]); 
 
    if(!$redis){ 
 
      return false; 
 
    } 
 
  
 
    $this->_redis[&#39;handler&#39;] = $redis; 
 
    $this->gc(null); 
 
    return true; 
 
  } 
 
  //关 
 
  public function close(){ 
 
    return $this->_redis[&#39;handler&#39;]->close(); 
 
  } 
 
  //读 
 
  public function read($session_id){ 
 
    return $this->_redis[&#39;handler&#39;]->get($session_id); 
 
  } 
 
  //写 
 
  public function write($sessionId, $sessionData){ 
 
    return $this->_redis[&#39;handler&#39;]->set($sessionId, $sessionData); 
 
  } 
 
  public function destory($sessionId){ 
 
    return $this->_redis[&#39;handler&#39;]->delete($sessionId) >= 1 ? true : false; 
 
  } 
 
  public function gc(){ 
 
    //获取所有sessionid,让过期的释放掉 
 
    $this->_redis[&#39;handler&#39;]->keys("*"); 
 
    return true; 
 
  } 
 
} 
 
$ses = new RedisSession(array(&#39;host&#39;=>&#39;127.0.0.1&#39;,&#39;port&#39;=>&#39;6379&#39;)); 
 
$ses->begin(); 
 
session_start(); 
 
$_SESSION[&#39;name&#39;]=&#39;zhangsan&#39;; 
 
echo $_SESSION[&#39;name&#39;];
Nach dem Login kopieren

Auf diese Weise können Sie das realisieren Sitzungsdaten wie der Redis-Codeausführungsprozess Redis müssen darin installiert sein.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Über die Definition und Verwendung der PHP-Funktion htmlentities()

Über die Verwendung von OpenSSL in PHP7. 1 Einführung in das Ersetzen von mcrypt

Das obige ist der detaillierte Inhalt vonInformationen zur Implementierung des Hinzufügens von Redis zur Sitzung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage