Start · Sprachen · PHP · Referenz · session_create_id

session_create_id

Funktion

Erzeugt eine neue, kollisionsfreie Session-ID, optional mit einem benutzerdefinierten Präfix.

seit PHP 7.1.0 Kategorie: http

Signatur

session_create_id(string $prefix = ""): string|false

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

Typ
string|false
Beschreibung
Gibt die neu generierte Session-ID als 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;
Generierte ID: a3f9e2c1d4b7... Aktive Session-ID: a3f9e2c1d4b7...

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...
Session-ID mit Präfix: 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.