web-dev-qa-db-ja.com

asp.netのセッション状態モードには、InProcとSQL Serverのどちらが適していますか?

ASP.NET Webサイトを開発しています。セッション状態モードの方が良い方を知りたい:InProcまたはSQL Server?この問題についてのあなたの経験について聞く必要があります。

もう1つの質問は、cookieless属性についてです。 trueに設定した場合、サイトにセキュリティホールはありますか? MSDNサイトで見たすべてのサンプルで、この属性はfalseに設定されていました。

そして最後の質問は、タイムアウト属性についてです。この属性をInProcモードに設定すると、セッションの存続期間に影響しますか?

24
Ali Foroughi

何の点で良いですか?

  • InProcセッションははるかに高速で、要件は少なく(シリアル化)、複数のWebサーバーでアプリケーションを実行している場合は使用できません。

  • SQLセッションははるかに遅く、オブジェクトのシリアル化要件がありますが、複数のWebサーバー間で共有できます。

それが開発者がほとんど気にする必要があるそれらの間の主な違いです。

Cookieなしのセッション

これについては、前の質問とはまったく関係のない質問なので、別の質問をする必要があります。

CookieセッションIDの処理をオフにすると、セッションIDを確認できます。しかし、あなたがクッキーをチェックすればあなたもそうすることができます。数はそこにあります。

また、セッションCookieの有効期限はブラウザセッションに設定されているため、永続性の点では実質的に同じです。

相手のセッションIDがわかっている場合、セッションがハイジャックされる可能性があります。もちろん、Cookieなしのセッションを使用する方が簡単です。URLを変更するだけです...

また、URLのコピーと共有/保存(お気に入り)にはもう1つ問題があります。私は問題を説明する必要がないと思います。

ほとんどのブラウザがCookieをサポートしているため、Cookieなしのセッションはデフォルトでfalseです。 クライアントにcookieがないことがわかっている場合にのみ、オンにする必要があります。

セッションタイムアウト

セッションのタイムアウトは、セッションの種類に関係なく、常にセッションの有効期限に関連しています。ただし、期限切れのセッションを破棄するにはSQL Serverエージェントサービスが必要なため、SQL Expressエディションを使用する場合、SQLセッションの状態がこの設定に従わない場合があることに注意する必要があります。期限切れのセッションを破棄する独自のWindowsサービスを作成することで、この問題を軽減できます。

32
Robert Koritnik

セッションは3つの方法で使用できます。それぞれに長所と短所があります

インプロセス:

  • インプロセスセッションはより高速です。
  • シリアル化せずにオブジェクトを追加できます
  • ただし、アプリケーションが複数のサーバーで実行される場合は、1つのサーバーに制限されます。これはうまくいきません
  • アプリケーションプールに何かが発生すると、セッション情報がすべて失われます

セッション状態:

  • Windowsサービスとして実行されます
  • アプリが複数のサーバーで実行される場合、これは役立ちます
  • セッションに追加されたオブジェクトはシリアル化する必要があります

SQLサーバー:

  • SQLサーバーを使用しますが、Oracleの実装もあります
  • 状態サーバーより遅い
  • はるかに信頼できる

この質問もチェックしてください: SQLServerとStateServer for ASP.NETセッション状態のパフォーマンス

15
adt

InProcセッション状態

InProcセッションモードは、セッション状態がローカルに保存されることを示します。つまり、InProcセッション状態モードでは、オブジェクトをWebアプリケーションのAppDomainに保存します。これにより、IIS(Internet情報システム)が再起動します。
通常、AppDomainは、構成ファイルのセクションのmemoryLimit属性設定、Global.asaxまたはWeb.configファイルの変更などのいくつかの要因に基づいて再起動されます。

これらの問題を克服するには、StateServerまたはSqlServerセッション状態モードを使用できます。ここでは、セッション状態はWebアプリケーションのAppDomainに保存されません。

OutProcセッション状態

OutProcセッションでは、Sessin状態は、WebアプリケーションのAppDomainではなくStateServerおよびSqlServerモードで格納されます。

StateServer:スタンドアロンのMicrosoft Windowsサービスを使用してセッション変数を格納するため、このサービスはIISに依存せず、別のサーバーで実行できます。複数のWebサーバーがセッション変数を共有できるため、このモードを負荷分散ソリューションに使用できます。 IISを再起動してもセッション変数は失われませんが、プロセスの境界を越えるとパフォーマンスに影響します。

SqlServer: SqlServerモードでは、IISプロセス外にあり、ローカルコンピューターまたはリモートサーバー上にあることができる状態ストアを利用することもできます。セッション情報を保持するために、SqlServerモードを使用できます。SqlServerモードは、セッションデータがSQL Serverで維持されることを除いて、アウトプロセスモードに似ています。

2
Jom George