フォーム認証タイムアウトとsessionStateタイムアウト


139

ウェブサイトのセッションタイムアウトに関して私が調べているコードがあります。web.configでこのコードに遭遇しました。

 <authentication mode="Forms">
  <forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" />
</authentication>

<sessionState timeout="30" />

誰が一方が他方よりも優先されるか、そしてそれらがどのように異なるかを誰かが知っていますか?ありがとう。


回答:


226

彼らは違うものです。フォーム認証のタイムアウト値は、認証Cookieが有効になるように設定されている時間を分単位で設定します。つまり、value数分後にCookieは期限切れになり、ユーザーは認証されなくなり、ログインにリダイレクトされます自動的にページングします。このslidingExpiration=true値は基本的に、ユーザーがタイムアウト値内でリクエストを行う限り、認証され続けることを示しています(詳細はこちら)。slidingExpiration=false認証Cookie を設定valueすると、ユーザーがタイムアウト値内でリクエストを行うかどうかに関係なく、数分後に有効期限が切れます。

SessionStateタイムアウト値セット特定のセッションのための(バッキングストアが使用されているものは何でも、または、SQL Serverの、OutOfProcなど)セッション状態プロバイダがメモリに保持データに必要とされる時間の量。たとえば、例の値を使用してオブジェクトをセッションに配置すると、このデータは30分後に削除されます。ユーザーはまだ認証されている可能性がありますが、セッションのデータは存在しない可能性があります。このSession Timeout値は、すべての要求の後に常にリセットされます。


26
1つの明確化:フォーム認証タイムアウトは、チケットが保存されている可能性があるCookieとは限らず、チケットの有効期限を設定します。Cookieには有効期限がまったくない場合があります(混乱を招くセッションCookieと呼ばれます。つまり、ユーザーがブラウザを閉じるまで存続します)。Cookieがまったくない場合もあります(「Cookieなし」のフォーム認証)。永続的なCookieの場合、フォーム認証はCookieの有効期限とチケットの有効期限を同じ時刻に設定します。
bmode、2014

13
MSDNのもう1つの明確化:「パフォーマンスの低下を防ぎ、Cookie警告がオンになっているユーザーに対して複数のブラウザ警告を回避するために、指定された時間の半分以上が経過するとCookieが更新されます。」したがって、Cookieのタイムアウトは、半分を超えた場合にのみリセットされます。したがって、セッションタイムアウトの2倍に設定することをお勧めします。
user917170 2015

21

SlideingExpiration = trueの値は、基本的には、すべての要求が行われた後にタイマーがリセットされ、ユーザーがタイムアウト値内で要求を行う限り、認証され続けることを示しています。

これは正しくありません。認証Cookieのタイムアウトは、タイムアウトの半分の時間が経過した場合にのみリセットされます。

たとえば、https://support.microsoft.com/de-ch/kb/910439/en-usまたはhttps://itworksonmymachine.wordpress.com/2008/07/17/forms-authentication-timeout-vs-sessionを参照してください。 -タイムアウト/


18

私が理解していることから、彼らは互いに独立しています。セッションタイムアウトを認証タイムアウト以下にすることで、認証がタイムアウトした後にユーザー固有のセッション変数が永続化されないようにすることができます(これが問題である場合は、これが通常の質問です)質問)。もちろん、ログアウト時にセッション変数の破棄を手動で処理する必要があります。

ここにあなたの質問に答えるか、少なくともあなたを正しい方向に導くかもしれないまともな応答があります:


7

違いは、1つ(フォームのタイムアウト)はユーザーの認証に関係し、もう1つ(セッションのタイムアウト)は、キャッシュされたデータがサーバーに保存される期間に関係しています。したがって、これらは非常に独立したものであるため、一方が他方に優先することはありません。


5
      <sessionState timeout="2" />
      <authentication mode="Forms">
          <forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
      </authentication>

この構成では、2分ごとにログインページに移動します。これは、以前の回答を論争しているようです


1
これは、ログイン関連の情報がセッション変数に格納されている場合に発生し、それがクリアされると、ログインにリダイレクトされます。だからそれはコードに依存しますか?
Steve

0

この質問に出くわした人は、MSのこのドキュメントを参照してください。FormsAuthenticationのタイムアウト設定に関しては、非常に詳しく説明されています。

このドキュメントでは、bmodeがAccepted Answerで行ったコメントについて詳しく説明します-永続的なCookieについて(Session vs Expires)

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-security/introduction/forms-authentication-configuration-and-advanced-topics-cs#specifying-the-tickets-タイムアウト値

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.