Explication détaillée de l'instance de stockage de base de données de session en php

伊谢尔伦
Libérer: 2023-03-07 17:12:01
original
2518 Les gens l'ont consulté

Bien qu'en modifiant le dossier de stockage de la session, la session ne remplira pas le dossier temporaire et ne provoquera pas le crash du site, mais vous pouvez calculer cela si un grand site Web compte 1 000 personnes se connectant par jour et 30 000 personnes se connectant par mois. , alors le site aura 30 000 fichiers de session. Cependant, il n'est pas facile d'interroger un session_id dans ces 30 000 dossiers. À ce stade, vous devez appliquer le stockage de la base de données de session, qui est session_set_save_handle( en PHP. ) fonction. Le format de syntaxe est le suivant :

session_set_save_handle(open, close, read, write, destroy,gc);
Copier après la connexion

La description des paramètres de la fonction session_set_save_handle() est la suivante :

参 数说 明
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 记录

Généralement, les paramètres d'application utilisent directement des variables, mais les paramètres dans cette fonction comprend 6 fonctions et, lorsqu'elle est appelée, elle appelle simplement la chaîne du nom de la fonction. Ces paramètres seront introduits séparément ci-dessous, et enfin ces fonctions seront encapsulées dans une classe.

(1) Encapsulez la fonction session_open() pour vous connecter à la base de données. Le format du code est le suivant :

<?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;);
     }
  }
?>
Copier après la connexion

Remarque : Dans le code ci-dessus, $save_path et $ Les deux paramètres session_name ne sont pas utilisés ici, mais il est généralement recommandé aux amis de conserver les deux paramètres saisis, car ces deux variables sont généralement utilisées.

(2) Encapsulez la fonction session_close() pour fermer la connexion à la base de données. Le format du code est le suivant :

<?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);
  }
?>
Copier après la connexion

Remarque : il n'est pas nécessaire de le faire. quoi que ce soit dans les paramètres de cette fonction, donc que la session soit stockée dans une base de données ou un fichier, elle n'a qu'à renvoyer true. Mais s'il s'agit d'une base de données MYSQL, il est préférable de fermer la base de données pour s'assurer qu'il n'y aura aucun problème à l'avenir.

(3) Encapsulez la fonction session_read(), définissez l'horodatage UNIX de l'heure actuelle dans la fonction et recherchez le nom et le contenu de la session en fonction de la valeur $key L'exemple. le code est le suivant :

<?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);
     }
  }
?>
Copier après la connexion

Explication selon laquelle la session_expiry stockée dans la base de données est un horodatage UNIX.

(4) Encapsule la fonction session_write(), qui définit l'heure d'expiration de la session et recherche le nom et le contenu de la session. Si le résultat de la requête est vide, la session dans la page actuelle sera insérée dans la base de données en fonction de l'identifiant de la session, du nom de la session et de l'heure d'expiration ; si le résultat de la requête n'est pas vide, les informations de stockage de la session dans la base de données seront modifiées en fonction de $. et le résultat de l'exécution sera renvoyé. L'exemple de code est le suivant :

<?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);
  }
?>
Copier après la connexion

(5) Encapsulez la fonction session_destroy() pour supprimer la session dans la base de données selon la Valeur $key. Le code est le suivant :

<?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);
  }
?>
Copier après la connexion

(6) Encapsulez la fonction session_gc() et supprimez la session expirée en fonction du délai d'expiration donné. suit :

<?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);
  }
?>
Copier après la connexion

Ce qui précède est la fonction session_set_save_handler() à 6 paramètres (fonction).

Ce qui suit utilise la fonction session_set_save_handler() pour implémenter la base de données de stockage de session. Le code d'implémentation est le suivant :

<?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;;
?>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!