Heim >Backend-Entwicklung >PHP-Tutorial >Wie lässt sich eine PHP-Sitzung nach 30 Minuten Inaktivität zuverlässig beenden?

Wie lässt sich eine PHP-Sitzung nach 30 Minuten Inaktivität zuverlässig beenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-24 22:56:15374Durchsuche

How to Reliably Expire a PHP Session After 30 Minutes of Inactivity?

So lassen Sie eine PHP-Sitzung effektiv nach 30 Minuten ablaufen

Während PHP Optionen wie session.gc_maxlifetime und session.cookie_lifetime für den Sitzungsablauf bereitstellt, Sie sind nicht ganz zuverlässig. Hier ist ein umfassender Ansatz zur Implementierung Ihres eigenen Sitzungs-Timeout-Mechanismus.

Probleme mit den integrierten PHP-Optionen:

  • session.gc_maxlifetime : Gibt an, wann Sitzungsdaten als „Müll“ betrachtet und beim Sitzungsstart bereinigt werden. Allerdings läuft der Garbage Collector sporadisch, mit einer Standardwahrscheinlichkeit von nur 1 %, was möglicherweise zu einem vorzeitigen Sitzungsabbruch führt.
  • session.cookie_lifetime: Diese Option bestimmt die Lebensdauer des gesendeten Sitzungscookies zum Browser. Allerdings wird dadurch die Sitzung selbst nicht ungültig, was weiterhin in der Verantwortung des Servers liegt.

Implementieren eines benutzerdefinierten Sitzungs-Timeouts:

Der effektivste Weg, a Um eine Sitzung nach einer bestimmten Zeit der Inaktivität zu beenden, müssen Sie Ihren eigenen Timeout-Mechanismus implementieren. Dazu gehört die Pflege eines Zeitstempels der letzten Aktivität (Anfrage) und dessen Aktualisierung bei jeder Anfrage. Wenn die letzte Aktivität mehr als 30 Minuten zurückliegt, können Sie die Sitzung deaktivieren und zerstören.

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

Durch die kontinuierliche Aktualisierung der Sitzungsdaten verhindern Sie, dass das Änderungsdatum der Sitzungsdatei vorzeitig vom Garbage Collector entfernt wird.

Zusätzliche Sicherheitsmaßnahmen:

Um Angriffe wie Sitzungsfixierung zu verhindern, können Sie regelmäßig Generieren Sie die Sitzungs-ID neu, indem Sie den Zeitstempel $_SESSION['CREATED'] aktualisieren:

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:

  • Stellen Sie sicher, dass session.gc_maxlifetime auf a gesetzt ist Wert, der mindestens der Lebensdauer Ihres benutzerdefinierten Ablaufhandlers entspricht (hier 1800). Beispiel).
  • Um die Sitzung nach 30 Minuten Aktivität statt seit dem Start ablaufen zu lassen, verwenden Sie setcookie mit einer Ablaufzeit von time() 60 * 30, um das Sitzungscookie aktiv zu halten.

Das obige ist der detaillierte Inhalt vonWie lässt sich eine PHP-Sitzung nach 30 Minuten Inaktivität zuverlässig 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