6

ASP.NET内のセッション管理について質問がありました。IIS内の3つのオプション(InProc、StateServer、SQL Server)を確認しましたが、複数のサーバー間および複数のWebアプリケーション間でセッションの永続性を展開する際に問題が発生します。サブドメイン間(同じ親から)および各ドメインの下の複数のWebアプリケーションでセッションを管理するために使用できる他のオプションはありますか?

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

注:IDについては心配していません。WindowsIdentityFoundation(など)を実装して、3か所すべてにクレームを送信できます。私はセッションの永続性の後です。

ヒープに感謝します、リー

編集: 私は私たちの目的のためにカスタマイズできるサードパーティのコードを使うことになりました。完璧に動作し、ソースコードを購入する際に、必要に応じて更新できます。

4

5 に答える 5

1

State Server または SQL Server のストレージは、複数のアプリ間であっても、実行しようとしていることに対して正常に動作するはずですが、すべてのアプリケーションが同じ MachineKey を持っている必要があることを覚えておく必要があります。

ASPNET 負荷分散および ASPNET 状態サーバー

HTH

于 2012-02-21T21:27:58.037 に答える
0

あなたが望むのは分散キャッシングのように思えますか?

この投稿では、いくつかのオプションを確認することができます - ASP.NET Web App の分散キャッシュ/セッション ソリューション

私はこの分野には少し慣れていませんが、Azure Web アプリは本質的にセッション状態の適切なオプションを提供しないため、現在の MVC/ASP.NET プロジェクトでセッション状態に Microsoft Azure の AppFabric キャッシュを使用することに取り組んでいます。

上記の投稿のリンクは、Azure の AppFabric キャッシュと同様に機能し、セッション状態も処理できると思います。ただし、私はそれらのいずれも使用していないため、信頼性を保証することはできません. 今週末も自分のアプリでこの側面を始めたところです。

グレッグ

于 2011-08-08T02:04:30.680 に答える
0

1 つのオプションは、SQL Server を介してセッション状態を管理することです。または、NCache のようなものを調べて、複数のサーバー間で状態を管理することもできます。

于 2011-08-08T16:40:53.753 に答える
0

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

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

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

例: sessions.asp?session_name=username は、任意のローカル .net アプリから呼び出され、"John" と応答するため、"John" は session["session_name"] および sessions.asp (または aspx、php、または必要なもの) 内にあります。応答にテキストを書き込むだけです。

わかりやすく説明されているかどうかわかりません... 汚い簡単な方法です。私の会社では、それぞれが大量のセッションを持つ約 300 人の同時ユーザーに使用しており、かなりうまく機能しているようです。それが役に立てば幸い。;-)

于 2012-01-05T01:16:16.587 に答える
-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];

ログアウト時にキャッシュを削除することを忘れないでください

Cache.Remove(key);
于 2012-01-05T13:28:13.963 に答える