Почему мои сессии PHP умирают? И почему я не могу их восстановить? - PullRequest
2 голосов
/ 08 октября 2008

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

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

Ответы [ 2 ]

3 голосов
/ 08 октября 2008

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

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

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

1 голос
/ 08 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...