Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der Sitzungsdatenbank-Speicherinstanz in PHP

Detaillierte Erläuterung der Sitzungsdatenbank-Speicherinstanz in PHP

伊谢尔伦
伊谢尔伦Original
2017-04-28 16:41:382566Durchsuche

Obwohl durch die Änderung des Sitzungsspeicherordners die Sitzung nicht den temporären Ordner füllt und zum Absturz der Website führt, können Sie das berechnen, wenn sich auf einer großen Website 1.000 Personen pro Tag und 30.000 Personen pro Monat anmelden , dann wird die Site 30.000 Sitzungsdateien haben. Es ist jedoch nicht einfach, eine session_id in diesen 30.000 Ordnern abzufragen. Zu diesem Zeitpunkt müssen Sie den Sitzungsdatenbankspeicher anwenden, der in PHP session_set_save_handle( ist )Funktion. Das Syntaxformat lautet wie folgt:

session_set_save_handle(open, close, read, write, destroy,gc);

Die Parameterbeschreibung der Funktion session_set_save_handle() lautet wie folgt:

参 数 说 明
open(save_path, session_name) 找到 Session 存储地址,取出变量名称
close() 不需要参数,关闭数据库
read(key) 读取 Session 键值, key 对应 session_id
write(key, data) 其中data 对应设置的 Session 变量
destroy(key) 注销 session 对应 Session 键值
gc(expiry_time) 清除过期的 Session 记录

Im Allgemeinen verwenden Anwendungsparameter Variablen direkt, aber die Parameter in Diese Funktion besteht aus 6 Funktionen und ruft beim Aufruf nur die Zeichenfolge des Funktionsnamens auf. Diese Parameter werden im Folgenden separat vorgestellt und schließlich werden diese Funktionen in eine Klasse gekapselt.

(1) Kapseln Sie die Funktion session_open(), um eine Verbindung zur Datenbank herzustellen. Das Codeformat lautet wie folgt:

<?php
  function session_open($save_path,$session_name)
  {
     //连接 mysql 数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     // 判断数据库是否成功
     if(!$handle)
     {
        die(&#39;打开数据库失败&#39;);
     }
  }
?>

Hinweis: Im obigen Code: $save_path und $ Die beiden Parameter session_name werden hier nicht verwendet. Diese beiden Parameter können hier entfernt werden. Im Allgemeinen wird jedoch empfohlen, die beiden Parameter beizubehalten, da diese beiden Variablen im Allgemeinen verwendet werden.

(2) Kapseln Sie die Funktion session_close(), um die Datenbankverbindung zu schließen. Das Codeformat lautet wie folgt:

<?php
  function session_close()
  {
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     mysqli_close($handle);
     return(true);
  }
?>

Hinweis: Dies ist nicht erforderlich Alles in diesen Funktionsparametern. Unabhängig davon, ob die Sitzung in einer Datenbank oder einer Datei gespeichert ist, muss sie nur „true“ zurückgeben. Wenn es sich jedoch um eine MYSQL-Datenbank handelt, ist es am besten, die Datenbank zu schließen, um sicherzustellen, dass es in Zukunft keine Probleme mehr gibt.

(3) Kapseln Sie die Funktion session_read(), legen Sie den UNIX-Zeitstempel der aktuellen Zeit in der Funktion fest und suchen Sie den Sitzungsnamen und -inhalt basierend auf dem $key-Wert. Das Beispiel Der Code lautet wie folgt:

<?php
  function session_read($key)
  {
     //连接数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     //设定当前时间
     $time = time();
     $sql = "select session_date from tb_session where session_key=&#39;$key&#39;and session_time>$time ";
     $result = mysqli_query($handle,$sql);
     $row = mysqli_fetch_array($result);
     if($row)
     {   //返回 Session 名称和内容
        return($row[&#39;session_date&#39;]);
     }else{
        return(false);
     }
  }
?>

Erklärung, dass der in der Datenbank gespeicherte session_expiry ein UNIX-Zeitstempel ist.

(4) Kapselt die Funktion session_write(), die die Ablaufzeit der Sitzung festlegt und nach dem Namen und Inhalt der Sitzung sucht. Wenn das Abfrageergebnis leer ist, wird die Sitzung auf der aktuellen Seite basierend auf Sitzungs-ID, Sitzungsname und Ablaufzeit in die Datenbank eingefügt. Wenn das Abfrageergebnis nicht leer ist, werden die Sitzungsspeicherinformationen in der Datenbank basierend auf $ geändert Schlüssel und das Ausführungsergebnis werden wie folgt zurückgegeben:

<?php
  function session_write($key,$data)
  {
     //连接数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     //设定失效时间
     $time = 60*60;
     // 得到 UNIX 时间戳
     $lapse_time = time() + $time;
     $sql = "select session_date from tb_session where session_key=&#39;$key&#39;and session_time>$lapse_time ";
     $result = mysqli_query($handle,$sql);
     if(mysqli_num_rows($result) == 0)  // 没有结果
     {    //插入数据库SQL语句
        $sql = "insert into tb_session values (&#39;$key&#39;,&#39;$data&#39;,$lapse_time)";
        $result = mysqli_query($handle,$sql);
     }else{
        // 修改数据库SQL语句
        $sql = "update tb_session set session_key=&#39;$key&#39;, sessoin_data=&#39;$data&#39;, session_time=$lapse_time where session_key=&#39;$key&#39; ";
        $result = mysqli_query($handle,$sql);
     }
     return($result);
  }
?>

(5) Kapseln Sie die Funktion session_destroy(), um die Sitzung entsprechend zu löschen $key-Wert. Der Code lautet wie folgt:

<?php
  function session_destroy($key)
  {
     //连接数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     // 删除 Session 的 SQL 语句
     $sql = "delete from tb_session where session_key=&#39;$key&#39;";
     $result = mysqli_query($handle,$sql);
     return($result);
  }
?>

(6) Kapseln Sie die Funktion session_gc() und löschen Sie die abgelaufene Sitzung entsprechend der angegebenen Ablaufzeit wie folgt:

<?php
  function session_gc($expiry_time)
  {
     //连接数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     // 将参数$expiry_time 赋值为当前时间戳
     $lapse_time = time();
     // 删除 Session 的 SQL 语句
     $sql = "delete from tb_session where expiry_time<$lapse_time";
     $result = mysqli_query($handle,$sql);
     return($result);
  }
?>

Das Obige ist die Funktion „session_set_save_handler()“ mit 6 Parametern (Funktion).

Im Folgenden wird die Funktion session_set_save_handler() verwendet, um die Sitzungsspeicherdatenbank zu implementieren. Der Implementierungscode lautet wie folgt:

<?php session_set_save_handler(&#39;session_open&#39;,&#39;session_close&#39;,&#39;session_read&#39;,&#39;session_write&#39;,&#39;session_destroy&#39;,&#39;session_gc&#39;);
  session_start();
  // 下面为我们定义的 Session
  $_SESSION[&#39;user&#39;] = &#39;tom&#39;;
  $_SESSION[&#39;pwd&#39;] = &#39;12345&#39;;
?>

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Sitzungsdatenbank-Speicherinstanz in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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