web-dev-qa-db-ja.com

セッションタイムアウトはIIS 7でどのように機能しますか?

Web.configで、sessionStateのタイムアウトを20分に設定しました。 MSDNによると、このタイムアウトは、セッションが放棄されるまでのアイドル時間を指定します。 In IIS 7、DefaultWebSite-> Session State-> Cookie Settings-> Timeout Out]にはweb.configで設定されたタイムアウト値が設定されます。私の場合は20分です。また、アプリケーションプール-> DefaultAppPool->詳細設定-> idleTimeout、10分に設定しました。

次に、2つのテストを作成しました。最初のテスト:午後3時45分にWebアプリにログインし、10分間アイドル状態にしました。午後3時55分にアプリを使用しようとしたが、追い出された。 idleTimeoutが効いてくると思います。

2番目のテスト:午後4時にWebアプリにログインし、午後4時5分、午後4時10分、午後4時15分、および午後4時20分にアプリで再生します。午後4時20分に追い出されると予想していました。しかし、私はそうではありませんでした。 IIS 7のセッション状態タイムアウト(20分)は、Webエージェントがユーザーに再認証を要求するまでのユーザーセッションがアクティブにできる最大時間です。このテストから明らかに誰も私にそれを説明できますか?また、どうすれば上記の場合のタイムアウトを設定できますか?

25
GLP

セッションタイムアウトは、ユーザーがサーバーにアクセスするたびに構成された値にリセットされるスライドタイムアウトです。

その期間にアプリケーションへの要求がなかった場合、アプリケーションアイドルタイムアウトが開始されます。

したがって、通常のシナリオは次のとおりです。

_Time  | User A       | User B       | Session States
------+--------------+--------------+-------------------------------------------
12:00 | Visits Page1 |              | A: New Session, Time-out: 20 minutes
12:02 | Visits Page2 |              | A: Time-out reset: 20 minutes
12:10 |              | Visits Page1 | A: Time-out: 12 min; B: New: 20 minutes
12:15 |              | Visits Page2 | A: Time-out: 07 min; B: Time-out: 20 min
12:22 |              |              | A: times out; B: 13 min remaining
12:32 |              |              | Application Shuts Down (Idle time reached)
12:35 | Visits Page3 |              | A: New Session Starts
_

ユーザーAが12:22後にサイトに戻ると、完全に新しいセッションになり、以前にそこに保存した値は失われます。

アプリケーションの再起動後もセッションが維持されるようにする唯一の方法は、SessionStateサービスまたはSQLセッション状態のいずれかを構成し、 machine.keyの構成 を設定して、毎回AutoGeneratedにならないようにすることです。サーバーが再起動します。

認証に標準のASP.NETメカニズムを使用している場合、ASP.NETは各ユーザーに2つのCookieを発行します。

  1. 認証トークン: 認証タイムアウト 設定によって制御され、Cookieの有効期限が切れていない場合にユーザーがサイトに自動ログインできるようにします。これは修正またはスライドでき、デフォルトは30分です。 、つまり、認証トークンはセッションよりも長い「アイドル」期間に対処できることを意味します。
  2. セッショントークン:セッションタイムアウト設定によって制御され、アプリケーションは訪問中にユーザーごとの値を保存およびアクセスできます。

これらのCookieは両方ともMachineKeyを使用して暗号化されます。したがって、アプリケーションがリサイクルして新しいキーを生成する場合、これらのトークンはいずれも復号化できず、ユーザーはログインして新しいセッションを作成する必要があります。


コメントへの応答:

  1. 20分間のセッションタイムアウトは、Session.Add(string, object)メソッドを使用してユーザーセッションオブジェクト( HttpSessionState )に配置したアイテムに関連しています。
  2. 場合によります。正しく設定した場合 machine.keyを設定認証トークンは引き続き有効であり、セッションはもう有効ではありません「InProc」は、アプリケーションの再起動後も保持され、引き続き読み取り可能です-上記のメモを参照してください。
37