Pourquoi mes sessions PHP meurent-elles? Et pourquoi je ne peux pas les restaurer?
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?
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?