ローカル開発サーバーとリモートWebサーバーの両方でPHPバージョン5.3.2を使用しています。
uploadifyを使用していくつかのファイルをサーバーにアップロードしようとしています。受信スクリプトでは、セッションに保存されているデータを使用したいのですが、uploadifyはフラッシュを使用してファイルをスクリプトに送信するため、セッションCookieを送信しません。
この問題の回避策は、uploadifyを取得してセッションIDをスクリプトにGETまたはPOSTすることですが、これは非常に信頼性が低いと感じています。私のスクリプトには次のものがあります。
<?php
ini_set('session.use_only_cookies', FALSE);
ini_set('session.use_trans_sid', TRUE);
session_name('SESSNAME');
session_start();
print_r($_SESSION);
スクリプトのURLはscript.php?SESSNAME = sessionidのようなもので、上記のように透過的なセッションIDを使用し、session_id($ _ GET ['SESSNAME'])を使用して手動でIDを設定しようとしました。
これは、ブラウザで直接スクリプトにアクセスし、セッションCookieを手動で削除した場合でも、現在のセッションIDを送信するときに常に機能します。また、ローカルサーバーのuploadifyでも常に機能します。ただし、リモートサーバーでuploadifyを使用すると、約20%の時間、完全にランダムに機能します。パターンはありません。追加すると、より頻繁に動作するように見えました
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
スクリプトに、しかし、これは単なる偶然の一致だったかもしれません。
ローカルサーバー情報:http
://www.dur.ac.uk/nrbrook/info_local.php
リモートサーバー情報:http ://www.dur.ac.uk/nrbrook/info.php
いくつかの憶測...
スクリプトが受け取っているヘッダーを掘り下げて見てみると、問題が特定された可能性があります。
FileReference.upload()(私は思う!)メソッドを使用する場合、フラッシュはCookieを送信しないため、uploadifyを使用する場合はセッションIDを送信する必要があります。ただし、セッションIDだけでなく、負荷分散された環境(リモートサーバーなど)には、ユーザーが現在使用しているサーバーを決定するBALANCEIDCookieもあります。FlashはこのCookieを送信しないため、ロードバランサーがリクエストを別のサーバーに送信することがあり、このサーバーにはセッションが存在しません。
セッションを出力した後、セッション変数を設定して、この動作をテストしました。これを実行してファイルを繰り返し送信すると、問題が発生します。最初は空の配列が表示されますが、変数にいくつかの繰り返しが表示され始めます。
したがって、上記がすべて当てはまる場合、私の質問は、アップロードでこのデータを送信するためにフラッシュを取得して、ロードバランサーが使用するサーバーを認識できるようにするために何ができるかということです。それともこれは失われた原因ですか?
答え?
さらに調査した結果、次の投稿が見つかりました-http: //swfupload.org/forum/generaldiscussion/977
これは、FileReference.upload()でCookieを送信する方法がないため、負荷分散されたサーバーでuploadifyを使用できないことを示しています。セッションデータを使用したい。ただし、セッションIDにリンクされたデータをファイルに保存するソリューションを試してみようと思います。uploadify受信スクリプトは、このファイルを開いて、必要なデータを引き出すことができます。
これは、Flashベースのものを使った初めての経験ですが、テクノロジーに対する私の意見は改善されていません。