validar start sesiones manejo destruir cookie control php session paypal

sesiones - session start php



¿Por qué están muriendo mis sesiones PHP? ¿Y por qué no puedo restaurarlos? (2)

Tengo una aplicación que usa PHP y la API de PayPal. La forma básica en que funciona para obtener un pago es hacer una llamada de servicio web a PayPal para obtener un token y luego hacer que un navegador redirija a PayPal con ese token para que el usuario pague. Una vez confirmados los detalles de pago, PayPal redirige a la URL que estableció 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, la sesión de PHP se ha ido. Es un problema bien documentado .

Primera pregunta: ¿por qué está sucediendo 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 enlazado sugiere una solución, 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 diferentes redireccionamientos. Cuando regreso 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 para nada lo que esperaba:

session_id es fc8f459a186a3f4695ff9ac71b563825
configurándolo nuevamente en 82460dcf8c8ddd538466e7cb89712e72
session_id ahora es 360ba3fd99d233e0735397278d2b2e55

Segunda pregunta: ¿por qué la identificación de la sesión no es para nada lo que configuré? ¿Qué estoy haciendo mal? O, al menos, ¿por qué ninguna de las variables de sesión vuelve?


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


Solo una idea ...

¿Tiene session.referer_check establecido en su host quizás? El valor predeterminado es la cadena vacía, pero puede haber sido cambiado ... y cuando la página ''vuelve'' desde PayPal, php va a destruir la información de la sesión.

Puede verificar session.referer_check con phpinfo ().