Domanda

Ho un'app che utilizza PHP e l'API PayPal. Il metodo di base per ottenere un pagamento è che si effettua una chiamata al servizio Web su PayPal per ottenere un token e quindi reindirizzare il browser su PayPal con quel token per il pagamento da parte dell'utente. Dopo che i dettagli del pagamento sono stati confermati, PayPal reindirizza all'URL originariamente impostato nella chiamata di servizio.

Tutto funziona, milioni di persone lo usano ogni giorno, eccetera.

La cosa strana è che, quando PayPal reindirizza indietro, la sessione PHP è andata. È un problema ben documentato .

Prima domanda: perché sta succedendo questo? Entrambe le pagine si trovano sullo stesso dominio, entrambe utilizzano HTTPS. La sessione funziona per tutte le richieste fino al reindirizzamento di PayPal.

Il thread del forum collegato suggerisce una soluzione alternativa, per mantenere l'ID sessione nella richiesta PayPal e quindi recuperarlo in seguito e ripristinare la sessione. Fantastico, tranne per il fatto che non sembra funzionare.

Posso aggiungere alcune dichiarazioni di registro:

log(session_id());

prima e dopo i vari reindirizzamenti. Quando torno da PayPal, ne registro di più.

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());

Il risultato non è affatto quello che mi aspetto:

  

session_id è fc8f459a186a3f4695ff9ac71b563825
  riportandolo su 82460dcf8c8ddd538466e7cb89712e72
   session_id ora è 360ba3fd99d233e0735397278d2b2e55

Seconda domanda: perché l'id di sessione non è affatto quello su cui l'ho impostato? Che cosa sto facendo di sbagliato? O almeno, perché nessuna delle variabili di sessione ritorna?

È stato utile?

Soluzione

Solo un'idea ...

Hai session.referer_check forse impostato sul tuo host? L'impostazione predefinita è la stringa vuota, ma potrebbe essere stata modificata ... e quando la pagina "torna" da PayPal, php eliminerà le informazioni sulla sessione.

Puoi controllare session.referer_check con phpinfo ().

Altri suggerimenti

Puoi fare un phpinfo () e dire se session.auto_start è vero?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top