удалить переменные сеанса, когда идентификатор сеанса известен, но не может начать сеанс - PullRequest
0 голосов
/ 19 мая 2011

У меня проблема с тем, как я пытаюсь удалить некоторые переменные сеанса при работе с PayPal и ipn. В частности, я хочу, чтобы кто-то вошел (или нет) в мой интернет-магазин, просмотрите мою корзину , перейдите на PayPal для оплаты, а затем перейдите на мой сайт.

Я использовал PayPal IPN для получения PayPal, чтобы уведомить меня, когда платеж завершен, и я могу направить пользователя обратно на мой сайт, где сеанс может быть начат снова, но я хочу иметь возможность сбросить корзину (но не весь сеанс, если они вошли в систему), как только платеж будет завершен. это будет охватывать мои базы в случае, если пользователь не вернется на страницу завершения платежа на моем сайте, а вернется на сайт на другой странице.

проблема в том, что, хотя я получаю один и тот же идентификатор сеанса как на последней странице с информацией о доставке на моем сайте перед переходом на PayPal, так и на целевую страницу на моем сайте из PayPal, когда платеж завершен, я не могу получить доступ к этой сессии в моем сценарии IPN, который работает на моем сайте в ответ на PayPal. я запускаю session_start () на каждой из этих трех страниц, но когда я отправляю электронное письмо или публикую сообщение на странице метода доставки и целевой страницы оплаты, я получаю один и тот же идентификатор сеанса. когда я посылаю себе по электронной почте результат идентификатора сеанса в моем сценарии ipn, я ничего не получаю.

Я мог бы убить телегу, прежде чем отправиться в PayPal, но что если они захотят вернуться и что-то изменить? я мог бы убить корзину на целевой странице, но что, если они каким-то образом попадут на другую страницу? Мне бы очень хотелось уничтожить корзину, но не всю сессию, когда я получу подтверждение оплаты, но я не знаю, как. я пробовал это на своей странице ipn:

session_start();

$a = session_id();

mail("webmaster@mysite.com", "ipn session id 0", $a, "From: webmaster@mysite.com");

//results in blank email, unlike in other locations on actual displayed pages

// Unset all of the session variables.

$_SESSION = array();

// Delete the session cookie to kill the session

if (isset($_COOKIE[session_name()])) {

setcookie(session_name(), '', time()-42000, '/');

}

// Finally, destroy the session.

session_destroy();

unset($_SESSION['cart']);

unset($_SESSION['product_id_array']);

unset($_SESSION['pp_checkout_btn']);

unset($_SESSION['state']);

unset($_SESSION['total']);

unset($_SESSION['shipping']);

unset($_SESSION['grand_total']);

но когда я возвращаюсь на страницу просмотра корзины, она все еще там. Любые идеи очень приветствуются. любой более конкретный код, который поможет, дайте мне знать, и я опубликую его.

1 Ответ

1 голос
/ 19 мая 2011

Paypal IPN-вызов осуществляется Paypal и выполняется только между серверами.Вы также не знаете, когда придет этот вызов IPN.Обычно они происходят в течение нескольких секунд, но могут прийти гораздо позже.Если вызов IPN не удастся, они будут повторяться снова в течение некоторого времени.Вы не можете ничего сделать, связанные с сеансом пользователей в IPN.У каждого пользователя есть свой сеанс, и вы не можете редактировать чужие.В этой ситуации у вашего пользователя есть сеанс, а Paypal (вызов IPN) получает свой собственный сеанс.

Вам необходимо очистить переменные сеанса при возврате на сайт после успешной оплаты.Это не надежно - есть вероятность, что корзина все еще не будет очищена, но это почти единственный способ сделать это.

...