Maison  >  Article  >  développement back-end  >  Comment définir le délai d'expiration de la session en php

Comment définir le délai d'expiration de la session en php

coldplay.xixi
coldplay.xixioriginal
2020-11-02 13:40:224191parcourir

Méthode de session PHP pour définir le délai d'expiration : utilisez d'abord Memcache ou Redis pour enregistrer la session et définir le délai d'expiration ; puis créez une classe de session et écrivez le délai d'expiration lorsque la session est écrite, enfin lors de la lecture ; jugez s’il a expiré en fonction du délai d’expiration.

Comment définir le délai d'expiration de la session en php

Méthode de session PHP pour définir l'heure d'expiration :

1.

La durée de validité de session par défaut de PHP est de 1440 secondes (24 minutes). Si le client ne s'actualise pas pendant plus de 24 minutes, la session en cours sera recyclée et invalide.

Lorsque l'utilisateur ferme le navigateur, la session se termine et la session deviendra également invalide.

Vous pouvez modifier session.gc_maxlifetime dans php.ini pour définir le cycle de vie de la session, mais rien ne garantit que les informations de session seront supprimées immédiatement une fois ce délai dépassé. Étant donné que le GC est démarré sur la base d'une probabilité, il se peut qu'il ne démarre pas avant longtemps. Ensuite, un grand nombre de sessions sont encore valides après avoir dépassé session.gc_maxlifetime.

2. .session.gc_maxlifetime, session.gc_probability, session.gc_divisor description

session.gc_maxlifetime = 30 signifie que lorsque le fichier de session n'a pas été consulté après 30 secondes, elle est considérée comme une session expirée et attend le recyclage du GC.

La probabilité d'appel du processus GC est calculée via session.gc_probability/session.gc_divisor, et session.gc_divisor est par défaut de 1000.

Si session.gc_probability = 1000, alors le processus GC est en Il sera appelé à chaque fois que session_start() sera exécuté pour effectuer le recyclage.

Augmenter la probabilité de session.gc_probability/session.gc_divisor aidera, mais cela aura un impact sérieux sur les performances.

3. Contrôlez strictement la méthode d'expiration de la session

1 Utilisez memcache/Redis pour enregistrer la session et définir le délai d'expiration, car le mécanisme de recyclage de memcache/redis. n'est pas basé sur la probabilité, ce qui peut garantir que la session devient invalide après l'expiration.

2. Utilisez uniquement PHP pour l'implémenter, créez une classe de session et écrivez l'heure d'expiration lorsque la session est écrite. Lors de la lecture, déterminez s'il a expiré en fonction du délai d'expiration.

<?php
/**
 * Session控制类
 */
class Session{
  /**
   * 设置session
   * @param String $name  session name
   * @param Mixed $data  session data
   * @param Int  $expire 超时时间(秒)
   */
  public static function set($name, $data, $expire=600){
    $session_data = array();
    $session_data[&#39;data&#39;] = $data;
    $session_data[&#39;expire&#39;] = time()+$expire;
    $_SESSION[$name] = $session_data;
  }
  /**
   * 读取session
   * @param String $name session name
   * @return Mixed
   */
  public static function get($name){
    if(isset($_SESSION[$name])){
      if($_SESSION[$name][&#39;expire&#39;]>time()){
        return $_SESSION[$name][&#39;data&#39;];
      }else{
        self::clear($name);
      }
    }
    return false;
  }
  /**
   * 清除session
   * @param String $name session name
   */
  private static function clear($name){
    unset($_SESSION[$name]);
  }
}
?>

démo :

<?php
session_start();
$data = &#39;123456&#39;;
session::set(&#39;test&#39;, $data, 10);
echo session::get(&#39;test&#39;); // 未过期,输出
sleep(10);
echo session::get(&#39;test&#39;); // 已过期
?>

Recommandations gratuites associées :

Cours vidéo de programmation

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