Signatur
Beschreibung
session_create_id() generiert eine neue Session-ID auf Basis der aktuellen Session-Konfiguration (z. B. session.hash_function, session.hash_bits_per_character bzw. ab PHP 7.1 session.sid_length und session.sid_bits_per_character). Die erzeugte ID wird automatisch auf Kollisionen mit bereits vorhandenen Sessions geprüft, sofern ein Session-Handler aktiv ist.
Die Funktion ist besonders nützlich, wenn eine Session-ID vorab reserviert oder an anderer Stelle gespeichert werden soll, bevor die eigentliche Session gestartet wird – beispielsweise beim Implementieren von Session-Fixation-Schutzmaßnahmen oder beim manuellen Verwalten von Session-IDs in verteilten Systemen.
Ein optionaler Präfix kann übergeben werden, der der generierten ID vorangestellt wird. Er darf nur alphanumerische Zeichen sowie die Zeichen ,, - und . enthalten; ungültige Zeichen führen zur Rückgabe von false.
Im Gegensatz zu session_regenerate_id() ersetzt diese Funktion die aktive Session-ID nicht – sie erzeugt lediglich einen neuen Wert, den man anschließend z. B. mit session_id() setzen kann.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $prefix | string | "" | Optionaler Präfix, der der generierten Session-ID vorangestellt wird. Erlaubte Zeichen: alphanumerisch sowie ,, - und .. Bei ungültigen Zeichen gibt die Funktion false zurück. |
Rückgabewert
string zurück. Bei einem Fehler (z. B. ungültiger Präfix oder interner Fehler) wird false zurückgegeben.Beispiele
Neue Session-ID erzeugen und manuell setzen
<?php
// Session starten, damit der Handler auf Kollisionen prüfen kann
session_start();
// Neue ID erzeugen (ohne Präfix)
$newId = session_create_id();
if ($newId === false) {
throw new RuntimeException('Session-ID konnte nicht erzeugt werden.');
}
echo 'Generierte ID: ' . $newId . PHP_EOL;
// Neue ID übernehmen und Session neu starten (Session-Fixation-Schutz)
session_commit();
session_id($newId);
session_start();
echo 'Aktive Session-ID: ' . session_id() . PHP_EOL;
Session-ID mit Präfix erzeugen
<?php
session_start();
// Präfix zur Unterscheidung verschiedener Anwendungsbereiche
$newId = session_create_id('app-');
if ($newId === false) {
throw new RuntimeException('Ungültiger Präfix oder Fehler bei der ID-Generierung.');
}
echo 'Session-ID mit Präfix: ' . $newId . PHP_EOL;
// Beispielausgabe: app-5f3a8c2e9d1b...
// Wichtig · Fallstricke
Sicherheitshinweis: session_create_id() prüft Kollisionen nur dann zuverlässig, wenn eine aktive Session (d. h. ein gestarteter Session-Handler) vorhanden ist. Ohne gestartete Session entfällt die Kollisionsprüfung.
Die Qualität (Zufälligkeit) der generierten ID hängt von der PHP-Konfiguration ab – insbesondere von session.sid_length (empfohlen: ≥ 32) und session.sid_bits_per_character (empfohlen: 5 oder 6). Zu kurze oder schwach konfigurierte IDs erhöhen das Risiko von Session-Hijacking.
Diese Funktion ersetzt nicht die laufende Session-ID. Um die aktive Session-ID sicher zu wechseln, sollte session_regenerate_id(true) bevorzugt werden, da es auch die alte Session-Datei löscht.