Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich eine PHP-Sitzung nach 30 Minuten Inaktivität effektiv beenden?

Wie kann ich eine PHP-Sitzung nach 30 Minuten Inaktivität effektiv beenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-23 11:23:12746Durchsuche

How Can I Effectively Expire a PHP Session After 30 Minutes of Inactivity?

Eine PHP-Sitzung nach 30 Minuten ablaufen lassen

Um eine Sitzung für eine bestimmte Zeit aufrechtzuerhalten und anschließend zu beenden, wird die Implementierung eines benutzerdefinierten Sitzungszeitlimits empfohlen. Dieser Ansatz ist zuverlässiger, als sich auf Sitzungseinstellungen wie session.gc_maxlifetime oder session.cookie_lifetime zu verlassen.

1. session.gc_maxlifetime:

session.gc_maxlifetime bestimmt die Zeitspanne, nach der Sitzungsdaten als „Müll“ betrachtet und entfernt werden. Die Speicherbereinigung erfolgt jedoch sporadisch, was sie zu einer unzuverlässigen Methode für den Sitzungsablauf macht.

2. session.cookie_lifetime:

session.cookie_lifetime beeinflusst nur die Lebensdauer des an den Browser gesendeten Cookies, nicht die Sitzung selbst. Der Server ist für die Ungültigmachung von Sitzungen verantwortlich, nicht der Client.

Empfohlene Lösung:

Implementieren Sie ein benutzerdefiniertes Sitzungs-Timeout, indem Sie einen Zeitstempel verwalten, der die letzte Aktivitätszeit verfolgt. Aktualisieren Sie diesen Zeitstempel bei jeder Anfrage.

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

Diese Methode lässt Sitzungsdaten effektiv nach 30 Minuten Aktivität ablaufen und verhindert eine vorzeitige Entfernung durch den Garbage Collector.

Für erhöhte Sicherheit sollten Sie eine regelmäßige Neugenerierung in Betracht ziehen die Sitzungs-ID, um eine Sitzungsfixierung zu verhindern Angriffe.

if (!isset($_SESSION['CREATED'])) {
    $_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 1800) {
    // session started more than 30 minutes ago
    session_regenerate_id(true);    // change session ID for the current session and invalidate old session ID
    $_SESSION['CREATED'] = time();  // update creation time
}

Hinweise:

  1. Setzen Sie session.gc_maxlifetime so ein, dass es mindestens so lang ist wie der benutzerdefinierte Ablaufhandler.
  2. Für ablaufende Sitzungen, die auf der Aktivität und nicht auf dem Sitzungsstart basieren, legen Sie die Cookie-Ablaufzeit mit setcookie auf 30 fest Minuten.

Das obige ist der detaillierte Inhalt vonWie kann ich eine PHP-Sitzung nach 30 Minuten Inaktivität effektiv beenden?. 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