Не удается отменить сеанс во время ответа PayPal IPN - PullRequest
0 голосов
/ 27 января 2012

Мне нужно сбросить переменные сеанса, когда PayPal возвращает IPN.

Простейший скрипт выглядит следующим образом:

<?php
session_start();
unset($_SESSION['my_item']);
?>

Paypal отправляет IPN, все работает нормально, но после запроса мой сеанспеременная сохраняет свое значение.

В чем может быть проблема?

Спасибо

ОБНОВЛЕНИЕ

Как уже упоминалось, когда ipn отправляет запрос, это уже другой сеанс, поэтому я могу сделать следующее.

Перед отправкой пользователя в PayPal, установите пользовательскую переменную на текущий

session_id ();

Когда PayPal отправляет IPN, я могу изменить текущий сеанс на предыдущий сеанс и очистить его.

session_id($_POST[custom]); 
session_start(); 
session_destroy(); //works fine

Ответы [ 4 ]

3 голосов
/ 27 января 2012

Проблема здесь в том, что уведомление IPN не связано с правильным сеансом.

IPN фактически является новым сеансом - он не представляет те же сеансовые куки, которые использует ваш клиент, потому что вы их не установили. Сессии являются уникальными для клиента, а шлюз PayPal является клиентом, отличным от клиента вашего пользователя.

Вам нужно будет отослать эту информацию через базу данных. Не существует разумного и простого способа заставить получателя IPN напрямую изменять данные сеанса пользователя.

1 голос
/ 27 января 2012

Я уже напишу об обновлении, но оно будет жидким, если я напишу решение в качестве ответа.

Если я отправляю session_id в PayPal, и когда он возвращает его обратно, я могу установить текущую сессию в ее значение и удалить ее.

session_id($_POST[custom]); //$_POST[custom] is user's session id
session_start(); 
session_destroy();
1 голос
/ 27 января 2012

Вы должны проверить конкретную переменную записи. $ _POST всегда будет установлен, даже если это просто пустой массив.

<?php
session_start();
if(isset($_POST['name'])) {
    unset($_SESSION['my_item']);
}
?>
0 голосов
/ 27 января 2012

Если ваше условие будет:

if(isset($_POST['ipn'])){
  ...do something
}

Тогда это должно работать:

if(isset($_POST['ipn'])){
  unset($_SESSION['my_item']);
}
...