私はYahooのUIライブラリの一部であるYahoo UploaderをASP.NetのWebサイトで使用して、ユーザーがファイルをアップロードできるようにしています。よく知られていない人には、アップローダはFlashアプレットを使ってFileOpenダイアログをより詳細に制御できます。私は、ファイルタイプのフィルタを指定する複数のファイルを選択できるようにする、などそれは素晴らしいことだが、それは次のように文書の制限があることができますので、既知のフラッシュのバグの隠しフォームフィールドにASP.NetセッションIDを入力できますか?
を、WindowsでFirefoxで実行されているアップローダはありませんアップロード時に正しいCookieを送信しないでください。 FirefoxのCookieを送信する代わりに、Internet ExplorerのCookieをそれぞれのドメインに送信します。回避策として、cookielessアップロードメソッドを使用するか、document.cookieをアップロードリクエストに追加することをお勧めします。
ユーザーがFirefoxを使用している場合、ファイルをアップロードするときにセッションを維持するためにCookieを使用することはできません。私は彼らが誰であるかを知る必要があるので、セッションが必要です!回避策として、私はthusly Applicationオブジェクトを使用しています:
Guid UploadID = Guid.NewGuid();
Application.Add(Guid.ToString(), User);
だから、私は一意のIDを作成し、ApplicationスコープでPage.User
オブジェクトを格納するためのキーとしてそれを使用しています。ファイルをアップロードするときに、そのIDを変数にPOSTに含めます。次に、ファイルのアップロードを受け入れるハンドラで、私は以下のようなものをユーザーオブジェクトつかむ:
IPrincipal User = (IPrincipal)Application[Request.Form["uploadid"]];
をこの実際に動作しますが、それは2つの明白な欠点があります:IIS、アプリケーションプール場合
を、ユーザーがアップロードページにアクセスして実際にファイルをアップロードするまでにアプリケーションが再起動されても、アプリケーションスコープから「uploadid」が削除され、認証できないためアップロードが失敗します。
私はこれまでにウェブファーム(場合によってはウェブガーデン)のシナリオに拡大すると、これは完全に壊れます。私は、今後このアプリケーションのスケーリングを計画することを除いて、心配しないかもしれない。
もっと良い方法がありますか? POST変数に実際のASP.NetセッションIDを渡し、セッションを取得するためにそのIDを他端で使用する方法はありますか?
私はSession.SessionID
でセッションIDを取得できますが、私はYUIを使用して次のページに投稿する方法を知っています。私が知らないのは、それを使って状態サーバーからセッションを取得する方法です。
はい、セッションを保存するために状態サーバーを使用しているため、アプリケーション/ IISが再起動され、Webファームのシナリオで動作します。
これは私が探していたまさにです。ありがとう! –
ねえ...リンクが壊れているようです。 – Mulki
はい、これが必要です!新しいリンクを提供してください! – pilavdzice