1

ばかげた質問で申し訳ありませんが、最近クライアント向けのサイトをデザインしていて、セッションで奇妙なことが起こっています。

このサイトには、ユーザーを PayPal にリダイレクトする PayPal ボタンがあり、サイトに再度リダイレクトされる前に支払いを確認できます。

ユーザーがリダイレクトされる前に、セッション変数の負荷が保存されます。PayPal に関するものもあれば、ログインしているユーザーやショッピング カートのアイテムなどを決定するための変数など、サイト上のものに関するものもあります。

さて、ここで問題が発生しています...

ユーザーは checkout.php から PayPal にリダイレクトされます。リダイレクトされる前に、サイトのすべてのセッション変数が存在します (var_dump および print_r によって表示されます)。これで問題ありません。

ユーザーは PayPal から orderreview.php に戻りますが、var_dump と print_r はサイト セッション変数が欠落していることを示していますが、PayPal のものはすべてそこにあります。

「session_start();」を削除して、この問題を修正しました。orderreview.php のトップから。

私の質問は、なぜその行を削除すると問題が解決したのですか? なぜ以前はうまくいかなかったのですか?

PHP セッションは理解できたと思っていましたが、思ったほど理解できていませんでした。

私はこれをどこかで読みます:

「PHP 4.3.3 以降、セッションがすでに開始されている間に session_start() を呼び出すと、レベル E_NOTICE のエラーが発生します。また、2 回目のセッション開始は単純に無視されます。」

そのため、セッションが既に開始されている場合、スクリプトの先頭で session_start を呼び出しても何の影響もないと想定していました。

回答ありがとうございます。これがばかげた質問である場合は、もう一度お詫び申し上げます。

4

1 に答える 1

1

処理中に別のサイトにリダイレクトされた可能性があります。また、Paypal から Web サイトに戻るsession_start()と、以前に保存されたセッション変数がリンクされていない新しいセッション ID が生成されました。

そして、削除するsession_start()と(セッションはこれなしでは機能しないと思います)、古いセッションIDが使用され、再生成されませんでした。したがって、古いセッション データが戻ってきました。

これは私の仮定です。

于 2012-08-03T22:16:18.847 に答える