Heim >Backend-Entwicklung >PHP-Problem >So legen Sie die Ablaufzeit einer Sitzung in PHP fest

So legen Sie die Ablaufzeit einer Sitzung in PHP fest

coldplay.xixi
coldplay.xixiOriginal
2020-11-02 13:40:224326Durchsuche

php-Sitzungsmethode zum Festlegen der Ablaufzeit: Speichern Sie zuerst die Sitzung mit Memcache oder Redis und legen Sie dann die Ablaufzeit fest. Wenn die Sitzung geschrieben wird, wird die Ablaufzeit auch beim letzten Mal geschrieben Bestimmen Sie anhand der Ablaufzeit einfach, ob es abgelaufen ist.

So legen Sie die Ablaufzeit einer Sitzung in PHP fest

php-Sitzungsmethode zum Festlegen der Ablaufzeit:

1. Gültigkeitsdauer der PHP-Sitzung

Die Gültigkeitsdauer der PHP-Sitzung beträgt standardmäßig 1440 Sekunden (24 Minuten), wenn der Client länger als nicht aktualisiert wird Derzeit 24 Minuten. Die Sitzung wird recycelt und ungültig gemacht.

Wenn der Benutzer den Browser schließt, endet die Sitzung und die Sitzung wird ebenfalls ungültig.

Sie können session.gc_maxlifetime in php.ini ändern, um den Sitzungslebenszyklus festzulegen. Es gibt jedoch keine Garantie dafür, dass die Sitzungsinformationen sofort nach Überschreiten dieser Zeit gelöscht werden. Da GC auf Wahrscheinlichkeitsbasis gestartet wird, kann es sein, dass es längere Zeit nicht gestartet wird. Dann ist eine große Anzahl von Sitzungen nach Überschreiten von session.gc_maxlifetime noch gültig.

2. Beschreibung von .session.gc_maxlifetime, session.gc_probability, session.gc_divisor

session.gc_maxlifetime = 30 bedeutet, dass, wenn nach 30 Sekunden nicht auf die Sitzungsdatei zugegriffen wird, diese als abgelaufene Sitzung betrachtet wird und darauf gewartet wird GC-Recycling.

Die Wahrscheinlichkeit eines GC-Prozessaufrufs wird über session.gc_probability/session.gc_divisor berechnet, und session.gc_divisor ist standardmäßig 1000.

Wenn session.gc_probability = 1000, führt der GC-Prozess jedes Mal session_start() aus Wird zur Ausführung aufgerufen Recycling.

Das Erhöhen der Wahrscheinlichkeit von session.gc_probability/session.gc_divisor hilft zwar, hat aber gravierende Auswirkungen auf die Leistung.

3. Kontrollieren Sie die Sitzungsablaufmethode strikt

1. Verwenden Sie Memcache/Redis, um die Ablaufzeit festzulegen, da der Recyclingmechanismus von Memcache/Redis nicht auf Wahrscheinlichkeit basiert wird nach Ablauf ungültig.

2. Verwenden Sie nur PHP, um es zu implementieren, eine Sitzungsklasse zu erstellen und die Ablaufzeit zu schreiben, wenn die Sitzung geschrieben wird. Stellen Sie beim Lesen anhand der Ablaufzeit fest, ob es abgelaufen ist.

<?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]);
  }
}
?>

Demo:

<?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;); // 已过期
?>

Zugehörige kostenlose Empfehlungen: Programmiervideokurs

Das obige ist der detaillierte Inhalt vonSo legen Sie die Ablaufzeit einer Sitzung in PHP fest. 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