Start · Sprachen · PHP · Referenz · session_commit

session_commit

Funktion

Alias von <code>session_write_close()</code> – schreibt die Session-Daten und beendet die Session.

seit PHP 4.4.0 Kategorie: http

Signatur

session_commit(): bool

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

Typ
bool
Beschreibung
Gibt 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.';
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.