PHPセッションが停止するのはなぜですか?そして、なぜそれらを復元できないのですか?

StackOverflow https://stackoverflow.com/questions/183932

  •  06-07-2019
  •  | 
  •  

質問

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かどうかを確認できますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top