If you want to change the session id on each log in, make sure to use session_regenerate_id(true) during the log in process.
<?php
session_start();
session_regenerate_id(true);
?>
[Edited by moderator (googleguy at php dot net)]
(PHP 4, PHP 5, PHP 7, PHP 8)
session_destroy — Löscht alle in einer Session registrierten Daten
session_destroy() löscht alle in Verbindung mit der aktuellen Session stehenden Daten. Mit der Session zusammenhängende globale Variablen und das Session-Cookie werden nicht gelöscht. Um wieder Session-Variablen verwenden zu können, muss session_start() aufgerufen werden.
Hinweis: Normalerweise ist es nicht erforderlich session_destroy() aufzurufen. Statt die Session zu löchen, sollte das $_SESSION-Array bereinigt werden.
Um die Session komplett zu löschen, muss auch die Session-ID gelöscht werden. Wenn zum Verfolgen der Session ein Cookie benutzt wird (standardmäßige Einstellung), muss das Session-Cookie gelöscht werden. Dafür kann setcookie() verwendet werden.
Ist session.use_strict_mode aktiviert, dann ist es nicht nötig, veraltete Session-ID-Cookies zu löschen, da das Session-Modul dann kein Session-ID-Cookie akzeptiert, wenn keine zu dieser Session-ID gehörigen Daten vorhanden sind, so dass ein neues Session-ID-Cookie gesetzt würde. Das Aktivieren von session.use_strict_mode wird grundsätzlich empfohlen.
Das sofortige Löschen der Session kann zu unerwünschten Ergebnissen führen. Wenn es gleichzeitige Anfragen gibt, können andere Verbindungen, z. B. Anfragen von JavaScript und/oder Anfragen von URL-Links, plötzlich Session-Daten verlieren.
Das aktuelle Session-Modul akzeptiert zwar keine leeres Session-ID-Cookie, aber das sofortige Löschen der Session kann aufgrund einer Client- (Browser-) seitigen Race-Condition zu einem leeren Session-ID-Cookie führen. Dies würde dazu führen, dass der Client unnötig viele Session-IDs erzeugt.
Um diese zu vermeiden, müssen Sie den Löschzeitstempel auf $_SESSION setzen und den Zugriff zu einem späteren Zeitpunkt verweigern. Oder stellen Sie sicher, dass Ihre Anwendung keine gleichzeitige Anfragen hat. Dies gilt auch für session_regenerate_id().
Diese Funktion besitzt keine Parameter.
Gibt bei Erfolg true
zurück. Bei einem Fehler wird false
zurückgegeben.
Beispiel #1 Löschen einer Session mit $_SESSION
<?php
// Initialisierung der Session.
// Wenn Sie session_name("irgendwas") verwenden, vergessen Sie es
// jetzt nicht!
session_start();
// Löschen aller Session-Variablen.
$_SESSION = array();
// Falls die Session gelöscht werden soll, löschen Sie auch das
// Session-Cookie.
// Achtung: Damit wird die Session gelöscht, nicht nur die Session-Daten!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000, $params["path"],
$params["domain"], $params["secure"], $params["httponly"]
);
}
// Zum Schluß, löschen der Session.
session_destroy();
?>
If you want to change the session id on each log in, make sure to use session_regenerate_id(true) during the log in process.
<?php
session_start();
session_regenerate_id(true);
?>
[Edited by moderator (googleguy at php dot net)]
It took me a while to figure out how to destroy a particular session in php. Note I'm not sure if solution provided below is perfect but it seems work for me. Please feel free to post any easier way to destroy a particular session. Because it's quite useful for functionality of force an user offline.
1. If you're using db or memcached to manage session, you can always delete that session entry directly from db or memcached.
2. Using generic php session methods to delete a particular session(by session id).
<?php
$session_id_to_destroy = 'nill2if998vhplq9f3pj08vjb1';
// 1. commit session if it's started.
if (session_id()) {
session_commit();
}
// 2. store current session id
session_start();
$current_session_id = session_id();
session_commit();
// 3. hijack then destroy session specified.
session_id($session_id_to_destroy);
session_start();
session_destroy();
session_commit();
// 4. restore current session id. If don't restore it, your current session will refer to the session you just destroyed!
session_id($current_session_id);
session_start();
session_commit();
?>
I'm using PHP 7.1 and received the following warning when implementing Example #1, above:
PHP message: PHP Warning: session_destroy(): Trying to destroy uninitialized session in...
What I discovered is that clearing $_SESSION and removing the cookie destroys the session, hence the warning. To avoid the warning while still keeping the value of using session_destroy(), do this after everything else:
if (session_status() == PHP_SESSION_ACTIVE) { session_destroy(); }
All of a sudden neither session_destroy() nor $_SESSION=[] were sufficient to log out. I found the next to work:
<?php
setcookie(session_name(), session_id(), 1); // to expire the session
$_SESSION = [];
?>