У меня есть приложение, использующее PHP и API PayPal. Основной способ получения платежа заключается в том, что вы обращаетесь к PayPal через веб-службу для получения токена, а затем выполняете перенаправление браузера на PayPal с этим токеном, чтобы пользователь мог произвести оплату. После подтверждения платежных данных PayPal перенаправляет на URL-адрес, который вы изначально указали в служебном вызове.
Это все работает, миллионы людей используют его каждый день, и так далее.
Странно то, что когда PayPal перенаправляет обратно, сеанс PHP исчезает. Это хорошо документированная проблема .
Первый вопрос: почему это происходит? Обе страницы находятся в одном домене, обе используют HTTPS. Сеанс работает для всех запросов вплоть до перенаправления PayPal обратно.
Связанная ветка форума предлагает обходной путь: сохранить идентификатор сеанса в запросе PayPal, а затем получить его позже и восстановить сеанс. Отлично, за исключением того, что это не похоже на работу.
Я могу добавить несколько операторов журнала:
log(session_id());
до и после различных перенаправлений. Когда я возвращаюсь из PayPal, я регистрируюсь еще.
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());
Результат совсем не тот, который я ожидал:
session_id
- это fc8f459a186a3f4695ff9ac71b563825
установив его обратно в 82460dcf8c8ddd538466e7cb89712e72
session_id
теперь 360ba3fd99d233e0735397278d2b2e55
Второй вопрос: почему идентификатор сеанса совсем не тот, на который я его установил? Что я делаю неправильно? Или, по крайней мере, почему ни одна из переменных сеанса не возвращается?