Warum sterben meine PHP-Sessions? Und warum kann ich sie nicht wieder herstellen?

StackOverflow https://stackoverflow.com/questions/183932

  •  06-07-2019
  •  | 
  •  

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.

Diese

alles 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?

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top