Pregunta

Tengo una aplicación que usa PHP y la API de PayPal. La forma básica en que funciona para obtener un pago es que realiza una llamada de servicio web a PayPal para obtener un token y luego hace que un navegador redirija a PayPal con ese token para que el usuario pague. Una vez confirmados los detalles del pago, PayPal redirige a la URL que configuró originalmente en la llamada de servicio.

Todo esto funciona, millones de personas lo usan todos los días, etcétera.

Lo extraño es que, cuando PayPal redirige de nuevo, la sesión de PHP desaparece. Es un problema bien documentado .

Primera pregunta: ¿por qué sucede esto? Ambas páginas están en el mismo dominio, ambas usan HTTPS. La sesión funciona para todas las solicitudes hasta que PayPal redirija nuevamente.

El hilo del foro vinculado sugiere una solución alternativa, para conservar el ID de sesión en la solicitud de PayPal y luego recuperarlo más tarde y restaurar la sesión. Genial, excepto que no parece funcionar.

Puedo agregar algunas declaraciones de registro:

log(session_id());

antes y después de los diversos redireccionamientos. Al volver de PayPal, inicio sesión un poco más.

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

El resultado no es en absoluto lo que esperaría:

  

session_id es fc8f459a186a3f4695ff9ac71b563825
  configurándolo de nuevo a 82460dcf8c8ddd538466e7cb89712e72
   session_id ahora es 360ba3fd99d233e0735397278d2b2e55

Segunda pregunta: ¿por qué el id de sesión no es en absoluto lo que configuré? ¿Qué estoy haciendo mal? O, al menos, ¿por qué no regresa ninguna de las variables de sesión?

¿Fue útil?

Solución

Solo una idea ...

¿Tiene session.referer_check configurado para su host quizás? El valor predeterminado es la cadena vacía, pero podría haberse cambiado ... y cuando la página 'regrese' de PayPal, php eliminará la información de la sesión.

Puede verificar el session.referer_check con phpinfo ().

Otros consejos

¿Puedes hacer un phpinfo () y decir si session.auto_start es verdadero?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top