Почему мои сессии PHP умирают? И почему я не могу их восстановить?

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

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть приложение, использующее 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

Второй вопрос: почему идентификатор сессии совсем не такой, как я его установил? Что я делаю неправильно? Или, по крайней мере, почему ни одна из переменных сеанса не возвращается?

Это было полезно?

Решение

Просто идея ...

Возможно, у вас есть session.referer_check для вашего хоста? По умолчанию используется пустая строка, но она могла быть изменена ... и когда страница «возвращается» из PayPal, php удалит информацию о сеансе.

Вы можете проверить session.referer_check с помощью phpinfo ().

Другие советы

Можете ли вы сделать phpinfo () и сказать, верно ли для session.auto_start?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top