dedlfix: Cross-Origin-Request und $_SESSION-Array

Beitrag lesen

Tach!

Wie schaffe ich es, dass $_SESSION-Array wiederherzustellen?

Du brauchst die Session-ID und die Datei, in der die Session-Daten aufbewahrt sind. Die ID kannst du ja mittels Kontrollausgabe kontrollieren. Die Datei(en) sollten an einem Platz liegen, an dem kein anderes PHP-Script aufräumt. Das heißt, wenn du (oder der Hoster) mehrere Projekte auf demselben Server laufen hast, sollten alle ein separates Verzeichnis bekommen (session.save_path). Es kann sonst passieren, dass die Garbage Collection einer Anwendung auf kürzere Zeit eingestellt ist und so die Sessiondaten aller Scripte vorzeitig löscht. Diese werden nämlich nicht unterschiedlich behandelt, nur weil sie ein anderes Script angelegt hat.

echo(session_name()."\n"); // hier wird die korrekte Session-ID, die auch übergeben wurde, ausgegeben

Die Session-ID wird aber über die Funktion session_id() gesetzt und gelesen. session_name() oder auch die Konfigurationsdirektive session.name setzt nur den Cookie- oder GET/POST-Parameter-Namen. Das ist das, was per default PHPSESSID heißt.

Zum Entwickeln hatte ich eine Test-Client-Skript auf der selben Subdomain wie login.php und api.php liegen. Da hat alles gepasst, selbst ohne Übergeben der Session-ID, da die Session ja bestehen blieb. Von einer anderen Domain ist es ein Cross-Origin-Request, welchen ich auch erst über eine .htaccess-Datei erlauben musste.

PHP unterscheidet nicht nach der Herkunft der Session-ID. Es ist also egal, ob sie aus einem String-Literal oder einer externen Datenquelle kommt - wenn sie denn der richtigen Funktion übergeben wird.

dedlfix.