2012-01-27 9 views
0

PayPalがIPNを返すときにセッション変数の設定を解除する必要があります。paypal ipnの応答中にセッションを解除できません

最も簡単なスクリプトは次の

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

ペイパルは、すべてが正常に動作しますが、私のセッション変数を保存し、要求した後、それが価値だ、IPNを送信しています。

何が問題になりますか?

おかげ

UPDATE

述べたようにIPNが要求を送信するとき、それはすでに別のセッションですので、私は次のことを行うことができます。 PayPalに送信ユーザーの前に

は、現在の

のsession_idにカスタム変数を設定();

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

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

コードを追加する必要があります。あなたが投稿したものについては、その問題を引き起こすものはありません。 – FtDRbwLXw6

+0

このような問題を引き起こす可能性のあるスクリプトはありません。なぜなら、ファイルをdirrectly(すなわち、ポストなしで、if文から移動しないように)開くと、うまく動作するからです。 – Simon

+2

'isset($ _ POST)'のテストは、常に真実であるため無意味です。 – Gumbo

答えて

3

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

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

この情報はデータベースを介して返送する必要があります。 IPN受信者にユーザーのセッションデータを直接変更させるための合理的で簡単な方法はありません。

+0

確かに、あなたは本当です。私がセッションIDをpaypalに送って戻ったとき、セッションIDに関連付けられたセッションをクリアします... – Simon

+0

私はあなたがこれを行うことができる方法はないと思います。あなたがPaypalに何かを送るとき、あなたは依頼をしているクライアントであり、クライアントはサーバ上でクッキーを設定できません。たとえそれがPaypalであったとしても、おそらくセキュリティの目的で無視されます。その後、IPNの間、Paypalはクライアントであり、あなたはサーバーであるため、それはあなたにあるすべてのクッキーを送信しますが、実際には毎回リクエストチェーンの開始点であるため、設定する方法はありません。データベースを使用し、トランザクション/クライアント/ etcのIDを使用してクライアントのセッションと結びつける必要があります。 – DaveRandom

+0

見てください更新してください。 – Simon

0

があなたの条件付きでなければなりません:

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

次に、この作業をする必要があります:

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

これは重要ではありません。私は 'if'ステートメントなしで同じことをしようとしています。 – Simon

+0

あなたのスクリプトは大丈夫です。$ _POSTをダンプすると何が表示されますか?そのフィールドとそのコンテンツはどのように見えるのですか? – jamesTheProgrammer

+0

DaveRandomの答えを参照してください。 – Simon

1

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

<?php 
session_start(); 
if(isset($_POST['name'])) { 
    unset($_SESSION['my_item']); 
} 
?> 
0

私は既にアップデートを書いていますが、回答を解答として書き込むとバッターになります。

私はpaypalにsession_idを送り、それを返すとき、私は自分の現在のセッションをそれのvallueに設定し、それを削除することができます。

session_id($_POST[custom]); //$_POST[custom] is user's session id 
session_start(); 
session_destroy(); 
関連する問題