Pourquoi mes sessions PHP meurent-elles? Et pourquoi je ne peux pas les restaurer?

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

  •  06-07-2019
  •  | 
  •  

Question

J'ai une application utilisant PHP et l'API PayPal. La méthode de base pour obtenir un paiement consiste à appeler le service Web de PayPal pour obtenir un jeton, puis à rediriger le navigateur vers PayPal avec ce jeton que l'utilisateur pourra payer. Une fois les détails du paiement confirmés, PayPal redirige vers l’URL que vous avez initialement définie dans l’appel de service.

Tout cela fonctionne, des millions de personnes l'utilisent chaque jour, et cetera.

Chose étrange, lorsque la redirection PayPal est rétablie, la session PHP est partie. Il s'agit d'un problème bien documenté .

Première question: pourquoi cela se produit-il? Les deux pages sont sur le même domaine, les deux utilisent HTTPS. La session fonctionne pour toutes les demandes jusqu’à la redirection de PayPal.

Le fil de discussion lié au forum suggère une solution de contournement, consistant à conserver l'ID de session dans la demande PayPal, à le récupérer ultérieurement et à restaurer la session. Génial, sauf que cela ne semble pas fonctionner.

Je peux ajouter des instructions de journal:

log(session_id());

avant et après les différentes redirections. Quand je reviens de PayPal, je me connecte un peu plus.

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

Le résultat n'est pas du tout ce à quoi je m'attendais:

  

id_session est fc8f459a186a3f4695ff9ac71b563825
  le redéfinissant sur 82460dcf8c8ddd538466e7cb89712e72
   session_id est désormais 360ba3fd99d233e0735397278d2b2e55

Deuxième question: pourquoi l'identifiant de session n'est-il pas du tout ce que j'ai défini? Qu'est-ce que je fais mal? Ou, du moins, pourquoi aucune des variables de session ne revient?

Était-ce utile?

La solution

Juste une idée ...

Avez-vous session.referer_check défini sur votre hôte peut-être? La valeur par défaut est la chaîne vide, mais elle a peut-être été modifiée ... et lorsque la page "reviendra" de PayPal, php supprimera les informations de la session.

Vous pouvez vérifier le session.referer_check avec phpinfo ().

Autres conseils

Pouvez-vous faire un phpinfo () et dire si session.auto_start est vrai?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top