2011-08-08 24 views
6

ASP .NETでのセッション管理に関する質問がありました。私はIIS(InProc、StateServer、SQL Server)の3つのオプションを見て、複数のサーバーや複数のWebアプリケーションにまたがってセッションの永続性を配備する際の問題を抱えています。 (同じ親からの)サブドメインと各ドメインの下の複数のWebアプリケーションとの間でセッションを管理するために利用できる他のオプションはありますか?ASP .NETでのセッション管理

例を挙げます: サイトwww.thisismysite.com.auを想像してみてください。ログインするとlogin.thisismysite.com.auに行きます。サイトを閲覧しても、www.thisismysite.com.au/MyWebApp/にアクセスします。私が達成しようとしているのは、セッションが3つのリンクすべてにわたって持続することです。私はこれを行うことができるサードパーティのツールであるGroat SessionFarmを知っていますが、そこに他のものがあるかどうか疑問に思っていますか?また、違いがあれば、SSL /非SSLの組み合わせもあります。

注:私は身元を心配していません.Windows Identity Foundation(または同等のもの)を実装して、3か所のすべての申し立てを送信することができます。私はセッションの永続性の後です。

おかげヒープ、 リー

EDIT: は、私たちは私たちの目的のためにカスタマイズすることができ、コードの第三者ピースと一緒に行くことになりました。完全に動作し、ソースコードを購入する際に、必要に応じて更新することができます。

答えて

0

分散キャッシングが好きなようなサウンドはありますか?私は地域にビットが新しいんだけど、私の現在のMVC/ASPでのセッション状態のために、マイクロソフトのAzureのAppFabricのキャッシュを使用してに取り組んでいます Distributed Cache/Session Solution for ASP.NET Web App

-

この投稿は、見にあなたにいくつかのオプションを提供してもよいです。 Azure Webアプリケーションは本質的にセッション状態に適したオプションを提供していないので、

上記の記事のリンクはAzureのAppFabricキャッシングと似ており、セッションの状態も処理できると思います。私はそれらのどれとも協力していませんが、信頼性を保証することはできません。今週の私自身のアプリでこの面を始めてみよう。

グレッグ

+0

私はどちらかサブドメイン(私は別のWebアプリケーション上で共有セッションを傾けることを意味し、アズールのAppFabricので、私はそれがは、StateServerの大きなバージョンのように動作します伝えることができるものから見えましたかサブアプリケーション)。しかし、複数のサーバーで同じサイト/アプリケーションで動作します。 – lkoutzas

0

は、1つのオプションは、SQL Serverを介してセッション状態を管理することであるか、複数のサーバ間で状態を管理するためのnCacheのようなものの中に見ることができます。

+0

ええ、それは複数のアプリケーション(サブWebアプリケーションまたはサブドメイン)では機能しません – lkoutzas

0

状態サーバーまたはSQLサーバーが動作するはずです。少なくともhttpの場合。 HTTP要求は、おそらく同じIPで終了する必要があります...それについてはわかりません。

セッションを維持するハードウェアロードバランサ/スイッチを使用することもできます。彼らはユーザーからの最初の要求をサーバーに送信し、そのユーザーからの次の要求は常に同じサーバーに送信されます。 (または彼らがしようとする)

これは、1つのWebアプリケーションだけでセッションを共有するためですが、私の仕事で何をしているのかをアプリケーション間で共有するためのものです(従来のサポートのためにasp.netも有効です) )、ユーザーがログインすると、aspで作成され、sessions.aspという名前のファイルから読み込まれます(名前は関係ありません)。Webリクエストから.netが呼び出されたときに値を返します。

例:sessions.asp?session_name = usernameはローカルの.netアプリケーションから呼び出され、 "John"に応答します。 "John"はセッション["session_name"]内にあり、sessions.asp(またはaspx、phpまたはあなたが欲しいものは何でも)ただ応答にテキストを書きます。

明らかに説明されているかどうかわかりません...それを行うには、汚い、簡単な方法です。私の会社では、セッション数が1セッションあたり約300人の同時ユーザーに使用しており、かなりうまく動作しているようです。それが役に立てば幸い。 ;-)

-1

セッションの代わりにキャッシュを使用して複数のWebアプリケーションを処理する単純な方法の1つです。

この場合、キャッシュキーはユーザーIDとユーザーの場所IPの組み合わせになります。 あなたはキャッシュ期間と認識しなければならないので、キャッシュはデフォルトで有効期限が切れれることはありませんので、ログアウト時に

int timeout=20; 
string key= userid+System.Web.HttpContext.CurrentRequest.ServerVariables("REMOTE_ADDR"); 

//Set 
Cache.Insert(key, value, null, DateTime.Now.AddMinutes(timeout), Cache.NoSlidingExpiration);  

//Get 
var value=Cache[key]; 

は何のために正常に動作する必要がありますキャッシュにSQL Server内の

Cache.Remove(key); 
1

状態サーバーやストレージを削除するのを忘れないでください複数のアプリケーション間でさえしようとしていますが、すべてのアプリケーションが同じMachineKeyを持つ必要があることを覚えておく必要があります。

ASPNET-load-balancing-and-ASPNET-state-server

HTH