Извините, если это глупый вопрос, но в последнее время я разрабатываю сайт для клиента, и с моими сеансами происходит что-то странное.
На сайте есть кнопка PayPal, которая перенаправляет пользователя в PayPal, чтобы он мог подтвердить платеж, прежде чем перенаправляться на сайт снова.
Перед переадресацией пользователя сохраняется загрузка переменных сеанса. Некоторые из них связаны с PayPal, другие – с вещами на моем сайте, такими как переменная, чтобы определить, какой пользователь зарегистрирован, их элементы корзины покупок и т. Д.
Теперь, вот где все пошло не так …
Пользователь перенаправляется с checkout.php на PayPal. Перед их перенаправлением присутствуют все переменные сеанса для сайта (показаны var_dump и print_r). Это отлично.
Пользователь возвращается из PayPal в orderreview.php, но var_dump и print_r теперь показывают, что переменные сеанса сайта отсутствуют, но все они есть в PayPal.
Я исправил эту проблему, удалив «session_start ();» от вершины orderreview.php.
Поэтому мой вопрос: почему удаление этой строки устранило проблему? Почему бы ему не работать раньше?
Я думал, что понял сессии PHP, но я не понимаю их так хорошо, как я думал.
Я читал это где-то:
«Начиная с PHP 4.3.3 вызов session_start (), когда сеанс уже запущен, приведет к ошибке уровня E_NOTICE. Кроме того, запуск второго сеанса будет просто проигнорирован».
Поэтому я был в предположении, что вызов session_start в верхней части скрипта ничего не повлияет, если сеанс уже был запущен раньше.
Спасибо за любые ответы, еще раз прошу прощения, если это глупый вопрос.
Это может быть из-за того, что вы были перенаправлены на другой сайт во время процесса. И пока вы возвращаетесь из Paypal на свой сайт, session_start()
генерирует новый идентификатор сеанса, с которым не связаны ваши ранее сохраненные переменные сеанса.
И когда вы удалили session_start()
(я не думаю, что сеанс должен работать без этого сверху), он использовал старый идентификатор сеанса и никогда не восстанавливался. Следовательно, старые данные сеанса вернулись!
Это только мое предположение.