0

PayPalがIPNを返すときに、セッション変数の設定を解除する必要があります。

最も単純なスクリプトは次のとおりです

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

PaypalはIPNを送信し、すべて正常に機能しますが、リクエスト後、セッション変数はその値を保存します。

何が問題になる可能性がありますか?

ありがとう

アップデート

前述のように、ipnがリクエストを送信するとき、それはすでに別のセッションなので、次のことができます。

ユーザーをペイパルに送る前に、カスタム変数を現在に設定します

セッションID();

paypalがipnを送信すると、現在のセッションを前のセッションに変更してクリアできます。

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

4 に答える 4

3

ここでの問題は、IPN通知が正しいセッションに関連付けられていないことです。

IPNは事実上新しいセッションです。設定していないため、クライアントと同じセッションCookieは表示されません。セッションはクライアントに固有であり、ペイパルゲートウェイはユーザーのクライアントとは異なるクライアントです。

この情報はデータベースを介してバウンスする必要があります。IPNレシーバーにユーザーのセッションデータを直接変更させる賢明で簡単な方法はありません。

于 2012-01-27T14:09:50.687 に答える
1

私はすでにアップデートを書いていますが、答えとして解決策を書くと、それは打者になります。

session_idをpaypalに送信し、それが返されると、現在のセッションをその値に設定して削除できます。

session_id($_POST[custom]); //$_POST[custom] is user's session id
session_start(); 
session_destroy();
于 2012-01-27T14:34:42.013 に答える
1

特定のpost変数をチェックする必要があります。$ _POSTは、空の配列であっても常に設定されます。

<?php
session_start();
if(isset($_POST['name'])) {
    unset($_SESSION['my_item']);
}
?>
于 2012-01-27T14:06:46.413 に答える
0

条件は次のとおりです。

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

次に、これは機能するはずです:

if(isset($_POST['ipn'])){
  unset($_SESSION['my_item']);
}
于 2012-01-27T14:05:57.693 に答える