2

PHP と PayPal API を使用するアプリがあります。支払いを受け取るための基本的な方法は、PayPal に対して Web サービス呼び出しを実行してトークンを取得し、そのトークンを使用してブラウザーを PayPal にリダイレクトして、ユーザーが支払うようにすることです。支払いの詳細が確認されると、PayPal はサービス呼び出しで最初に設定した URL にリダイレクトします。

これはすべて機能し、何百万人もの人々が毎日使用しています。

奇妙なことに、PayPal がリダイレクトされると、PHP セッションが失われます。これは十分に文書化された問題です。

最初の質問:なぜこれが起こっているのですか?どちらのページも同じドメインにあり、どちらも HTTPS を使用しています。セッションは、PayPal リダイレクトが戻るまで、すべてのリクエストに対して機能します。

リンクされたフォーラム スレッドは、PayPal リクエストでセッション ID を保持し、後でそれを取得してセッションを復元するという回避策を提案しています。それがうまくいかないように見えることを除いて、素晴らしい。

いくつかのログ ステートメントを追加できます。

log(session_id());

さまざまなリダイレクトの前後。PayPal から戻ってきたら、さらにログを記録します。

log("session id is " . session_id());
$session_id = get_session_id_from_paypal();
log("setting it back to " . $session_id);
session_id($session_id);
session_start();
log("session id is now " . session_id());

結果は私が期待するものとはまったく異なります:

session_idfc8f459a186a3f4695ff9ac71b563825です
_
session_id

2 番目の質問: セッション ID がまったく設定されていないのはなぜですか? 私は何を間違っていますか?または、少なくとも、セッション変数が戻ってこないのはなぜですか?

4

2 に答える 2

3

ただのアイデア...

session.referer_checkおそらくホストに設定していますか?デフォルトは空の文字列ですが、変更されている可能性があります...ページがPayPalから「戻ってくる」と、phpはセッション情報を破棄します。

session.referer_checkphpinfo()で確認できます。

于 2008-10-08T19:21:54.627 に答える
1

phpinfo() を実行して、session.auto_start が true かどうかを確認できますか?

于 2008-10-08T17:59:35.197 に答える