PHPセッションが停止するのはなぜですか?そして、なぜそれらを復元できないのですか?
質問
PHPとPayPal APIを使用するアプリがあります。支払いを受け取るための基本的な方法は、PayPalにWebサービスを呼び出してトークンを取得し、そのトークンを使用してブラウザーがPayPalにリダイレクトしてユーザーが支払うことです。支払いの詳細が確認されると、PayPalはサービス呼び出しで最初に設定したURLにリダイレクトします。
これはすべて機能し、何百万人もの人々が毎日使用しています。
奇妙なことは、PayPalがリダイレクトすると、PHPセッションがなくなることです。 十分に文書化された問題。 / p>
最初の質問:なぜこれが起こっているのですか?両方のページは同じドメインにあり、両方とも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
82460dcf8c8ddd538466e7cb89712e72
に戻すsession_id
は360ba3fd99d233e0735397278d2b2e55になりました
2番目の質問:セッションIDが設定したものとまったく違うのはなぜですか?何が間違っていますか?または、少なくとも、セッション変数がどれも戻らないのはなぜですか?
解決
ただのアイデア...
session.referer_check
をホストに設定していますか?
デフォルトは空の文字列ですが、変更されている可能性があります...また、PayPalからページが「戻ってくる」と、phpはセッション情報を破棄します。
phpcode()で session.referer_check
を確認できます。
他のヒント
phpinfo()を実行して、session.auto_startがtrueかどうかを確認できますか?