2

すべての処理が自分のサイトで行われる場合、すべてが正常に機能しています。セッション変数は正常に保存および取得されます。

これで、POST データを介して処理される 3 番目の部分の統合ができました。session_start()各phpファイルの最初の行で呼び出されました。

  • start_process.php - 次のようにいくつかのセッション変数を設定し、response.php にリダイレクトするサードパーティを呼び出します

     $_SESSION["id"] = $id       // Echoing these shows the correct values 
     $_SESSION["name"]= $name    // Echoing these shows the correct values 
    
  • response.php - このページはサードパーティからの応答を受け取り、セッション変数からデータを取得しようとします

     $id = $_SESSION["id"]           // This comes out to be blank
     $name = $_SESSION["name"]       // This comes out to be blank
    

私の処理ページ、つまりresponse.phpで、セッション値を取得しようとしていますが、セッション変数を取得できません。

SOで検索すると、値を確認することを示唆する投稿はほとんどありません

echo session_id();

これは、最初のページと私のサイトに戻ってくる後のページで同じように異なります. さらに検索すると、次の値を空白にする必要があることがわかります

echo ini_get('session.cookie_domain');

これは確かに空白です。この値が空白であることがわかり、セッションが適切にロードされていないにもかかわらず、スタックしています。

次に何をすべきか教えてください。デバッグはありますか?この問題を解決するためのヒントはありますか?


アップデート

start_process.php

投稿アクションがサードパーティサイトへのURLであるフォームがあります... as

<?php session_start(); 
$_SESSION["Check"] = "Abc";
echo session_id();
>
<form name="myform" action="http://<ThirdPartyUrl.com>/pathToSomePage.jsp" method="POST">
          <!-- some  hidden fields with value  and some other text fields -->
</form>

respone.php

サード パーティは、POST 変数の出力を直接テストする応答ページに再度ポスト リクエストで応答を返します。ここでは、セッション変数を使用しようとしています。

<?php session_start(); 
echo $_SESSION["Check"];
echo session_id(); // This is different from the one printed in the start_process.php page
?>

現在、私は共有ホストを使用しており、サードパーティは間違いなく独自のサーバーを持っているため、サードパーティのホスティングが同じサーバー上にあるとは思いません。

4

6 に答える 6

3

もう少しコードを見ないとわかりません (start_process.php がどのようにサードパーティのコードにフックされているか、サードパーティがどのように response.php に戻ってきているか)。ここにいくつかの推測があります:

理論 1: サードパーティのコードがセッションを台無しにしている (同じサーバーでホストされている場合)

このサードパーティの統合は、同じサーバーでホストされていますか? もしそうなら、サードパーティがあなたのセッションを終了/再作成、または変更している可能性があると思います.

理論 2: サードパーティが別のドメインを使用してサイトにリダイレクトしている

mydomain.comから始めて、サードパーティがwww.mydomain.com (またはそのようなもの)にリダイレクトする可能性はありますか? これらの 2 つのドメインは同じであるように見えますが、PHP セッションに関する限り、それらはまったく異なります。別のセッションになってしまいます。

于 2013-03-29T00:20:53.317 に答える
2

ショッピング カートの支払いゲートウェイの統合に取り組んでいるときに、同様の問題に対処しました。応答スクリプトが最終的にブラウザー経由で接続される場合 (つまり、ユーザーがサードパーティのサイトで完了した後に response.php にリダイレクトされる場合)、セッション ID と Cookie は保持されます。サード パーティのサイトからサーバー側の要求を介して応答スクリプトにアクセスした場合、その要求はまったく新しいセッションとして扱われます。その場合、多くの統合では、サードパーティのサイトによって生成された残りのデータとともに応答スクリプトに送り返される「パススルー」変数を送信できます。この変数を使用して、ユーザーのセッションを後で受け取るサーバー側の要求に接続できます (たとえば、2 つの値を関連付けるデータベースを作成できます)。または、「チート」することもできます システム。毎回リクエストとともにレスポンス スクリプトの場所を渡す場合は、独自のパススルー変数をそこに組み込むことができます。したがって、次のようなものの代わりに

<responseURL>www.mysite.com/response.php</responseURL>

あなたは送ることができます

<responseURL>www.mysite.com/response.php?key=abcd1234</responseURL>

key パラメーターをセッション ID に直接設定することをお勧めします。そのため、2 つの間で変換できる単純なものを作成する必要があります (上記のテーブルのように)。

于 2013-04-01T19:05:34.443 に答える
1

有効期限が指定された Cookie を使用してください。それはうまくいきます。コーダーがデバッグできるように、いくつかのコードで質問を更新しました!

于 2013-03-26T08:49:33.173 に答える
1

まず、使用する前にセッションを開始する必要があります。コードにセッション変数型に値を代入する前に: session_start(); セッションエイターを破棄/設定解除することを忘れないでください。それがうまくいくことを願っています

于 2013-03-26T08:44:40.273 に答える
1

簡単な答えは: クッキーを見つけてください!

ドメインまたはディレクトリ レベルで失う可能性があります。session_set_cookie_params()の仕様を参照してください。

第3部はどうでしょう。response.php は同じブラウザーまたは別の Web アプリから要求されたので、同じ Cookie を持っていますか? そうではないように思えます。

于 2013-03-29T09:32:37.417 に答える