2008-09-11 26 views
11

この質問はthis oneに関連していますが、私は本当に良い答えを得るためにそこに少し長すぎると思います。私はこれを簡単に保つつもりです。ASP.Net:セッションIDがあれば、セッションオブジェクトを取得できますか?

私はaspxページからフォームポストを受け付けるWebハンドラ(ashx)に取り組んでいます。ハンドラがこのフォーム投稿を受け取ったときに、何をする必要があるかを知るためには、ログインしているユーザー(User.Identity.Name)を知る必要がありますが、ブラウザから送信されたCookieに依存することはできません。

私はSession.SessionIDを取得して非表示のフォームフィールドに置くことができますが、ハンドラがフォームポストを受信すると、そのセッションIDを使用してログインしているユーザーの身元を把握する方法はありますか?

セッション状態にStateServerモードを使用しています。

答えて

1

ジョナスが、ここでこの質問への答えは偉大投稿:

Can I put an ASP.Net session ID in a hidden form field?

+3

ジョナスのリンクが壊れているようです – Mulki

+1

[the Wayback Machine](http://web.archive.org/web/20120415034411/http://swfupload.org/forum/generaldiscussion/98)のリンクを見つけました。 – shamp00

3

私はあなたのHttpHandlerまたはHttpModuleを実装では、あなたのHttpHandler

+0

優れた先端を、これはまだ私が頼りにすることはできませんASP.NET_SessionIdクッキーを送信するブラウザに依存しています。手動でSessionIdをハンドラに渡す方法が必要です。 –

0

IReadOnlySessionStateインタフェースを実装することがそれを行うことができ、あなたは常にBeginRequestイベントイベントからセッションにアクセスすることはできませんと思います。 OnAcquireRequestStateという別のイベントを処理できます。そのイベントでコードを記述すると、HttpContext.Current.Sessionはnullになりません。

1

セッションを直接使用する必要がない限り、ログインしたユーザーの識別情報に関する情報をシングルトン辞書またはキャッシュに格納し、隠しフィールドに格納されたSessionIDを介して参照することができます。私は個人的にはこれでセキュリティの問題を参照してくださいしかし、それらに入ることはありません。このタイプの実装では、単一使用IDを発行することを検討します。

+1

良い考えですが、このシングルトン辞書をどこに保存するのですか? Applicationオブジェクトは、ファーム内の他のWebサーバー(またはWebガーデン内の他のプロセススレッド)にも配布されませんが、SQLデータベースはオプションですが、私はよりエレガントなものを望んでいました。 –

+0

SQLサーバーが最適です。このために状態サーバーを使用している場合は、同様のペナルティになります。または、この交換を処理する独自のWCFサービスを作成することもできます。固有のIDブローカーとIDストレージとして機能することができます。また、SQLエンドポイント・サービスを使用することもできます。 –

関連する問題