2017-03-23 17 views
1

このアプリケーションは負荷分散環境で動作しています。セッションストアとしてSQLデータベースを使用します。アプリはシンプルで、独自のデータベースを持っていません。IDを使用して別のセッションにアクセスし、そのセッション変数を読み取る方法はありますか?

私は、SessionIdを知っている別の内部サーバーから呼び出されるエンドポイントを作成しました。私は、このエンドポイントが現在のセッションからではなくSessionIdによってセッション変数を取得できるようにします。

私はこれを行うために新しいデータベースを作成することができますが、2つのフィールドSessionIdとそれに関連する1つの値を持つ1つのテーブルしか持たないため、残念です。このテーブルを現在のセッションデータベースに入れることもできます。私は可能な限りデータベース接続コードを追加する必要はありません。

現在のセッション以外の別のセッションの変数にアクセスする方法はありますか?

+0

セッションIDを知っているのであれば、なぜそのセッションIDにリクエストクッキーを設定してそれを正常に処理できないのですか?あなたのコードをどのようにセットアップしたいかわからない。 –

+0

別のセッションから変数をルックアップする必要のあるエンドポイントは、コードを介して内部サーバーからヒットします。このため、各リクエストコンテキストは異なる(新しい)セッションを持つことになります。クッキーは可能性もありません。 – Jaguir

+0

"コードを介して内部サーバーからヒット"と "クッキーは可能性もない"非常に混乱している組み合わせです...あなたはSQLに直接挑戦しようとしていますか?私は、「内部サーバ」が「LB環境で動作するアプリケーション」に対してどのような要求をしているのか分からない。 –

答えて

0

私は間違っているかもしれません。セッション状態記憶域がデータベースベース(メモリ内ではない)であるという事実は、IHttpSessionStateの動作原理を変更しません。私はあなたがそれを行うことができるとは思っていません。あなたが実際にしたいことは疑いの余地があります。異なるコンテキストから全く別のコンテキストにアクセスすることはできません。これには、潜在的な問題(スレッドの安全性、セッション状態の実装が変更された場合の問題など)が多数あります。 Webアプリケーションがセッション状態ストアを認識していない可能性があります。

たとえば、単にセッション状態を使用し、IISで直接セッション状態を設定した場合、アプリケーションスレッドがデータベースに存在することをすぐに知ることはできません。 DBにバックアップされたセッション状態のない同じアプリケーションですか?アプリケーションコードの変更は必要ありません。IISの再設定だけです。予期しない動作や実行時エラーが発生する可能性があります。

既知のセッションIDにクッキーを設定する(コメント内の)提案は唯一の「脱出」ですが、セキュリティの観点からは最適ではありません。

しかし、実装しようとしているのは、キャッシュプロバイダにとって適切な仕事のようです。 SqlCacheDependencySystem.Web.Cachingから使用して、データベースをキャッシュに使用することができます。次に、上記のSessionIdをキャッシュ識別子の1つとして使用できます。

+0

SqlCacheDependencyは興味深いようです。私はそれについてもっと見ていきます。ありがとう! – Jaguir

関連する問題