3

PHP の 2 つのサイト間で大きな配列を転送しようとしています。私は両方の管理者です。配列はあるサイトで作成され、作成後、ユーザーを他のサイトに自動的にリダイレクトし、処理された配列を渡したいと考えています。

特定のドメインに限定されているため、SESSION スーパーグローバルを使用できません。配列が長すぎるため、GET は適していません。POST が適しているかどうか、ユーザーにボタンをクリックしてフォームを送信することを強制せずにデータを自動的に送信する方法があるかどうかはわかりません。これにはJavaScriptを使用できることは知っていますが、より堅牢なものを使用することを好みます。

私はPHPに比較的慣れていないので、これを実行する他の方法を知りたいです. ありがとう!

4

10 に答える 10

4

最も簡単な方法は、cURLやセットアップなどのHTTPライブラリを使用して、POSTリクエストを他のサイトに送信することです。また、ユーザーのIPアドレスを含めると、投稿されたデータを関連付けることができます。JavaScriptがないと、POSTデータを使用してユーザーをリダイレクトすることはできません。

上記の方法で注意したいことの1つは、実装方法によっては、ユーザーがデータよりも先に到着する可能性があることです。

HTTP仕様で定義されているように、POSTに制限はありませんが、phpの構成によっては、他のサーバーでのPOSTの処理で問題が発生する可能性があります(意味によっては)。(POST制限はデフォルトで8MBに設定されていると思います)

于 2009-12-03T18:26:58.910 に答える
2

cURL関数を介してHTTPPOSTリクエストを送信し、 serialize() ed配列をリクエスト本文に追加します。

于 2009-12-03T18:27:34.653 に答える
2

私はこのようなことをします:

  • サーバー A でトークンを生成します(例: sha1(timestamp + session id + random()))
  • cURL を使用してシリアル化された配列をサーバー B にポストし、生成したトークンを渡します
  • サーバー B で、シリアル化されたデータとトークンをデータベース テーブルに格納します -フィールド: トークン (CHAR)、データ (BLOB)
  • ユーザーをリダイレクトするhttp://ServerB/?data_token=[TOKEN GENERATED IN STEP 1]
  • サーバー B はトークンに関連付けられたデータを db から取得し、db エントリを削除して、配列を新しいユーザー セッションに格納します。
于 2009-12-03T18:37:37.353 に答える
1

両方が同じサーバー上にある場合は、一方が他方のセッションをハイジャックする可能性があります。以前、これを使用して安全なサーバーにジャンプし、最初のホストでsession_id()関数を使用してセッションを取得し、同じ関数を使用して2番目のホストに設定しました。

http://www.php.net/manual/en/function.session-id.phpを参照してください

于 2009-12-03T18:26:21.877 に答える
1

「配列」を作成した後、それをIDに関連付けて(そしてどこかに格納して)、このIDで他の配列にリダイレクトすることをお勧めします。IDを使用してサイト2から、「配列」を返すサイト1のページを呼び出すことができます。

于 2009-12-03T18:27:21.767 に答える
1

あなたの問題:

サーバー(a )からサーバー(b)配列(ar)を送信

私の解決策:

  1. Server(a)は、 json_encode(ar) を使用して、たとえば json でエンコードされたArray(ar)を含むServer(b)の一意の url(url)を生成します。このArray(ar)は、たとえば mysql または単純なテキスト ファイルを使用してurlに保存する必要があります。

    $uid = md5(uniqid(mt_rand(), true)); // to generate unique id
    
  2. Server(a)はブラウザを $uid も含むServer(b)にリダイレクトします

    $url = "http://server-b/page"; // url to page
    header('Location: $url?uid=$uid');
    
  3. Server(b)はServer (a) のURLからコンテンツを取得し、コンテンツをデコードしてArray(ar)に戻します。

    $uid = $_GET['uid']; // uid
    $url_server_a = "http://server-a/webservice?uid=$uid";
    $ar = json_decode(file_get_contents($url_server_a));
    
于 2009-12-03T18:46:52.580 に答える
0

シリアル化して、他のサーバーからアクセスできるファイルとして保存し、他のサーバーから再度ロードできると思います。そうすれば、ユーザーの操作は必要ありませんが、プライバシーの問題を回避するために、ファイルを保存するディレクトリを保護する必要があります。

編集:私はそれらが異なるサーバー上にあると仮定しています、そうでなければそれはさらに簡単でしょう...

于 2009-12-03T18:26:45.247 に答える
0

私の場合は、情報を他のメディアに保存します。たとえば、memcacheタイプの環境、または両方がアクセスできるデータベースです。

于 2009-12-03T18:28:43.747 に答える
0

配列をJSONにデコードし、一時的なJSONファイルのダウンロードを含む2番目のサーバーにリンクを送信し、JSONファイルをPHPに再デコードするだけで、長いURLを使用する必要はありません。

于 2009-12-03T18:52:07.687 に答える
0

配列が作成された後、隠しフィールドにデータを含むフォームを持つページをすばやく生成できます。このページは、(method="POST" を使用して) フォームをリダイレクトに自動的に送信できます。

于 2009-12-03T18:32:47.197 に答える