Moin,
für eine HTML5-App habe ich ein API geschrieben, welches verschiedene Abfragen an den Server regelt. Serverseitig existiert ein Login-Skript (login.php) und ein Skript für das Handling der Abfragen (api.php).
Beim Anmelden wird der Username sowie ein gehashtes Passwort übergeben und serverseitig mit den Angaben abgeglichen; ist alles ok, werden verschiedene Daten in das Session-Array geschrieben. Anschließend wird die Session-ID zurückgegeben. Soweit funktioniert alles. Nun habe ich aber folgendes Problem:
Wenn ich dann von einem Client aus, auf das API-Skript zugreifen will, übergebe ich die Session-ID und versuche sie wiederherzustellen (mit session_name()
und session_start()
). Soweit scheint das auch zu funkionieren (es kann natürlich auch sein, er erstellt einfach eine neue Session, die er so nennt). Fakt ist: Das Session-Array bleibt leer. Nun habe ich schon einige Zeit herumprobiert, habe aber scheinbar ein Verständnisproblem.
Die Frage ist: Wie schaffe ich es, dass $_SESSION-Array wiederherzustellen?
Hier der relevante Code:
login.php:
if($_POST['password']==$set['password']) {
$_SESSION = $set;
$_SESSION['auth'] = "OK";
echo("{\n\t\"status\": \"OK\",\n\t\"id\" : \"".session_id()."\"\n}");
}
api.php:
if(isset($_POST['SID'])){ session_name($_POST['SID']); echo("SESSION wiederaufgenommen: ".$_POST['SID']."\n");}
session_start();
echo(session_name()."\n"); // hier wird die korrekte Session-ID, die auch übergeben wurde, ausgegeben
print_r($_SESSION); // ist trotz allem leer :(
Noch ein Hinweis: 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. Irgendwie muss es ja aber gehen, es gibt ja viele Apps, die per HTTP-Requests mit Servern kommunizieren...
Grüße Marco
Ich spreche Spaghetticode - fließend.