ASP.NETのセッションタイムアウト


163

IIS 6.0でASP.NET 2.0アプリケーションを実行しています。セッションタイムアウトをデフォルトの20分ではなく60分にしたい。私は以下をしました

  1. で設定<sessionState timeout="60"></sessionState>web.configます。
  2. IISマネージャー/ Webサイトのプロパティ/ASP.NET構成設定で、セッションタイムアウトを60分に設定します。
  3. アプリケーションプールのプロパティ/パフォーマンスでアイドルタイムアウトを60分に設定します。

まだ20分でセッションタイムアウトが発生します。他に必要なことはありますか?


1
20分間の測定方法に関する情報を提供してください。20分がセッションタイムアウトであり、他の種類ではないことを確認してください。
John Saunders、

11
賛成/反対の矢印の近くにあるチェックマークを使用して、良質な回答を承認済みとしてマークしてください
Brian Webster

3
8年後、正解はまだ受け入れられていません。
ネイサン

IISマネージャー/ Webサイトのプロパティ/ASP.NET構成設定の意味を明確にしてください。IISの段階的な変更点は何ですか?
niico

回答:


275

フォーム認証を使用していますか?

フォーム認証では、タイムアウトに独自の値を使用します(デフォルトでは30分)。フォーム認証のタイムアウトにより、セッションがまだアクティブな状態でユーザーがログインページに送られます。これは、セッションがタイムアウトしたときにアプリが行う動作のように見える場合があります。

<system.web>
    <authentication mode="Forms">
          <forms timeout="50"/>
    </authentication>

    <sessionState timeout="60"  />
</system.web>

フォームのタイムアウトをセッションタイムアウトよりも小さい値に設定すると、セッションデータを失うことなく、ログインするためのウィンドウをユーザーに与えることができます。


@分からない。
ワード

43

web.configやIISについては知りません。しかし、私はC#コードからあなたがそれをすることができると信じています

Session.Timeout = 60; // 60 is number of minutes

21
これは現在のセッションのタイムアウトを調整するだけですか?または、アプリケーション全体のタイムアウトを調整しますか?
Johncl、2012

2
ではNothing ドキュメントは設定があることを示していない Session.Timeout、私はそれが全体のアプリケーションのためであると仮定して、web.configファイルまたはIISを使用するよりも何が違うのです。
2015

@Drasiveは正しいと思いますが、少なくとも2つのクライアントがサーバーに接続されていることを証明し、アイドルセッションのタイムアウトを確認する必要があります。
QMaster 2017年

42

web.configファイルで次のコードブロックを使用します。ここでは、デフォルトのセッションタイムアウトは80分です。

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

ポップアップアラートメッセージ付きのセッションタイムアウトについては、次のリンクを使用してください。

セッションタイムアウトの例

参考:上記の例はdevexpressポップアップコントロールを使用して行われるため、devexpressポップアップコントロールを通常のポップアップコントロールにカスタマイズ/置き換える必要があります。devexpressを使用している場合、カスタマイズする必要はありません


cookieless false?
Kiquenet 2018

3
@ Kiquenet、cookielessをtrueに設定すると、セッションIDがURLに埋め込まれるため、セキュリティリスクが高くなります。ASP.NETフレームワークはURLに一意のIDを挿入します。これを確認するには、Cookieを無効にするか、Cookieless属性をtrueに設定します。MSDNによると、デフォルトでは、SessionID値はブラウザーの有効期限のないセッションCookieに保存されますが、cookieless = "true"を指定すると、ASP.NETはページのURLに一意のセッションIDを自動的に挿入することにより、Cookieなしのセッション状態を維持します。
Hamza Khanzada

8

machine.configに有効になっている可能性があるものはありますか?web.configでセッションタイムアウトを設定すると、IISまたはmachine.configの設定が上書きされますが、アプリケーションのサブフォルダーのどこかにweb.configファイルがある場合、その設定はアプリケーションのルートの設定を上書きします。

また、私が正しく覚えている場合、IISのタイムアウトは.aspxではなく.aspページにのみ影響します。web.configのセッションコードは正しいですか?次のようになります。

<sessionState
    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    stateNetworkTimeout="60"
    sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
    cookieless="false"
    timeout="60"
/>

8

私の状況では、それはアプリケーションプールでした。xx分間アイドル状態になると再起動するように設定されています。再起動しないように設定すると、Web Configの値が使用されるようです。


私たちは2020年だと知っていますが、いまいましい問題を解決しただけです。
Binary9

8

通常、これで十分です。

20分後に、セッションが失われている理由はアイドル状態からのものであると確信しています...

セッションがクリアされる理由には多くの理由があります。IISのイベントログを有効にしてから、イベントビューアを使用して、セッションがクリアされた理由を確認できます。他の理由が原因である可能性がありますか?

イベントメッセージドキュメントと関連するイベントの表を読むこともできます


3

認証を使用している場合は、web.configファイルに以下を追加することをお勧めします。

私の場合、ユーザーはタイムアウトするとログインページにリダイレクトされます。

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>

web.configに配置した後、<authentication mode = "Forms">でエラーが発生しました
Lst Patrick


2

ASP.Netコア1.0(vNextまたはそれに使用される任意の名前)以降は、セッションの実装が異なります。私は、セッションのタイムアウト値を変更しStartup.csvoid ConfigureServices使用しました:

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

または、appsettings.jsonファイルを使用する場合は、次のようなことができます。

// Appsettings.json
"SessionOptions": {
    "IdleTimeout": "00:30:00"
}

// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));

2

この設定はIISにあります。

設定

「ASP」の下のサーバーレベル、Webサイトレベル、またはアプリレベルで見つけることができます。

ここではweb.configレベルで設定できると思います。ご自身でご確認ください。

<configuration>
   <system.web>

      <!-- Session Timeout in Minutes (Also in Global.asax) -->
       <sessionState timeout="1440"/>

   </system.web>
</configuration>

Global.asaxにもありますか?
Kiquenet 2018

1

IISセッションのタイムアウト値は、クラシック.aspアプリケーション専用であり、これはIIS構成で制御されます。 あなたの場合ASP.NETアプリの場合、web.configで指定されたタイムアウト値のみが適用されます。


IISのアプリプールのタイムアウトはどうですか?
SteveCav

1

デフォルトのセッションタイムアウトはIISで20分に定義されています

IIS 8.5 Webでホストされている各サイトについて、以下の手順に従います

IISタイムアウト構成

IIS 8.5マネージャーを開きます。

サイト名をクリックします。

「管理」セクションの「構成エディター」を選択します。

構成エディターの上部にある「セクション:」ドロップダウンリストから、「system.web / sessionState」を見つけます。

アプリケーションに応じて可能な限り低い値を使用して、「タイムアウト」を「00:20:00以下」に設定します。許容値は、高価値アプリケーションの場合は5分、中価値アプリケーションの場合は10分、低価値の場合は20分です。価値のあるアプリケーション。

「アクション」ペインで、「適用」をクリックします。


0

削除するよりもウェブサイトのセッションタイムアウトが必要な場合

<authentication mode="Forms">
      <forms timeout="50"/>
</authentication>

web.configファイルのタグ。


-1

Timeoutプロパティは、アプリケーションのSessionオブジェクトに割り当てられたタイムアウト期間を分単位で指定します。ユーザーがタイムアウト期間内にページを更新または要求しない場合、セッションは終了します。

IIS 6.0:許容される最小値は1分、最大値は1440分です。

Session.Timeout = 600;

-2

IISでセッションタイムアウト値を変更した後、親切にIISを再起動してください。これを行うには、コマンドプロンプトに移動します。IISRESETと入力し、Enterキーを押します。


web.configファイルを編集すると、IISが自動的にリセットされます。
ティモシーゴンザレス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.