Signatur
Beschreibung
session_commit() ist ein direkter Alias der Funktion session_write_close(). Sie schreibt alle zwischengespeicherten Session-Daten in den Session-Speicher und gibt die Session-Sperre (Session-Lock) frei.
PHP sperrt eine Session, sobald sie geöffnet wird, damit parallele Anfragen desselben Benutzers nicht gleichzeitig auf die Session-Daten schreiben können. Wird diese Sperre nicht explizit aufgehoben, bleibt sie bis zum Ende des Skripts aktiv. Bei lang laufenden Skripten (z. B. bei langsamen Datenbankabfragen oder HTTP-Requests) kann das dazu führen, dass weitere Anfragen desselben Benutzers warten müssen. Ein frühzeitiger Aufruf von session_commit() gibt die Sperre gezielt frei.
Nach dem Aufruf von session_commit() stehen die Session-Daten zwar noch über $_SESSION zur Verfügung, neue Änderungen daran werden aber nicht mehr automatisch persistiert. Sollen danach weitere Daten gespeichert werden, muss die Session mit session_start() neu geöffnet werden.
Die Verwendung des Alias session_commit() statt session_write_close() ist reine Geschmackssache; beide Funktionen verhalten sich identisch.
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler beim Schreiben der Session-Daten.Beispiele
Session frühzeitig schließen, um die Sperre freizugeben
<?php
session_start();
// Session-Daten setzen
$_SESSION['benutzer_id'] = 42;
$_SESSION['letzter_besuch'] = time();
// Session schreiben und Sperre freigeben,
// bevor eine aufwändige Operation beginnt
session_commit();
// Lang laufende Operation – andere Requests des Nutzers können
// jetzt ebenfalls auf die Session zugreifen
sleep(5); // Beispiel für eine lang laufende Verarbeitung
echo 'Verarbeitung abgeschlossen.';
Unterschied zwischen session_commit und session_write_close verdeutlichen
<?php
session_start();
$_SESSION['token'] = bin2hex(random_bytes(16));
// Beide Aufrufe sind äquivalent:
// session_write_close();
session_commit();
// $_SESSION ist noch lesbar, aber Änderungen werden nicht mehr gespeichert
echo $_SESSION['token']; // Gibt den gesetzten Token aus
// Neue Änderungen nach session_commit() werden NICHT persistiert:
$_SESSION['token'] = 'neuer_wert'; // Geht verloren!
echo PHP_EOL . 'Session wurde gespeichert und Sperre freigegeben.';
// Wichtig · Fallstricke
Wichtig: Nach dem Aufruf von session_commit() werden weitere Änderungen an $_SESSION nicht in den Session-Speicher geschrieben. Um erneut Daten zu speichern, muss die Session mit session_start() wieder geöffnet werden.
In Umgebungen mit vielen gleichzeitigen Anfragen desselben Benutzers (z. B. bei Ajax-Polling oder parallelen API-Aufrufen) sollte session_commit() so früh wie möglich aufgerufen werden, um Blockierungen durch die Session-Sperre zu vermeiden.