Warum sterben meine PHP-Sessions? Und warum kann ich sie nicht wieder herstellen?
Frage
Ich habe eine app, PHP und den PayPal-API. Die grundlegende Art und Weise funktioniert es, eine Zahlung zu erhalten, ist, dass Sie einen Web-Service-Aufruf zu PayPal tun ein Token zu bekommen und dann noch mit diesem Token PayPal ein Browser Umleitung für den Benutzer zu zahlen. Nachdem die Zahlungsdetails bestätigt wurden, leitet PayPal an die URL zurück ursprünglich Sie im Service-Aufruf gesetzt.
Diesealles funktioniert, Millionen von Menschen nutzen es jeden Tag, und so weiter.
Merkwürdige ist, wenn PayPal Umleitungen zurück, wird die PHP-Session gegangen. Es ist ein gut dokumentierte Ausgabe .
Erste Frage: Warum ist das passiert? Beide Seiten sind auf der gleichen Domäne, die beide HTTPS verwenden. Die Sitzung Werke für alle Anforderungen bis zum PayPal Umleitung zurück.
Das verlinkte Forum-Thread schlägt eine Abhilfe, die Session-ID in der PayPal-Anfrage zu anhalten und dann später abrufen und die Sitzung wiederherzustellen. Große, außer es scheint nicht. Arbeit
Ich kann einige Log-Anweisungen hinzufügen:
log(session_id());
vor und nach den verschiedenen Umleitungen. Bei der Wiedergabe von PayPal kommt, ich etwas mehr anmelden.
log("session id is " . session_id());
$session_id = get_session_id_from_paypal();
log("setting it back to " . $session_id);
session_id($session_id);
session_start();
log("session id is now " . session_id());
Das Ergebnis ist nicht das, was ich erwarten würde:
session_id
ist fc8f459a186a3f4695ff9ac71b563825
Setzen sie zurück zu 82460dcf8c8ddd538466e7cb89712e72
session_id
ist jetzt 360ba3fd99d233e0735397278d2b2e55
Zweite Frage: Warum ist die Session-ID überhaupt nicht, was ich setzen Sie ihn auf? Was mache ich falsch? Oder zumindest, warum keine der Session-Variablen zurückkommen?
Lösung
Nur eine Idee ...
Sie haben session.referer_check
Sie Ihren Gastgeber vielleicht setzen?
Der Standardwert ist die leere Zeichenkette, aber es könnte geändert haben ... und wenn die Seite ‚kommt zurück‘ von PayPal, PHP wird die Session info trash.
können Sie überprüfen die session.referer_check
mit phpinfo ().
Andere Tipps
Können Sie eine phpinfo () und sagen, ob session.auto_start wahr ist?