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_id
fc8f459a186a3f4695ff9ac71b563825です
_
session_id
2 番目の質問: セッション ID がまったく設定されていないのはなぜですか? 私は何を間違っていますか?または、少なくとも、セッション変数が戻ってこないのはなぜですか?