web.configでセッションタイムアウトを設定する方法


179

ASP.Net Webアプリケーションのインプロセスセッションのセッションタイムアウト値を設定する方法についての解決策が見つかりません。

VSTS 2008 + .Net 3.5 + C#を使用しています。タイムアウトを1分に設定するために私が自分で書いたものですが、正しいですか?

私はsystem.webセクションの下に書いた web.config

<sessionState timeout="1" mode="InProc" />

5
タイムアウトを定義する方法は正しいです。何か問題がありますか?
Darin Dimitrov

7
これは、開始から1分後ではなく、非アクティブな状態が1分後に終了することを意味します。私の推測では、この質問をしていて、タイムアウトを正しく入力した場合は、タイムアウトの動作について誤解を招く可能性があります。
Ivan Zlatanov

1
非アクティブな時間を設定する必要があります。それだけで十分です。イヴァン、ありがとう!
George2 2009

笑!タイムアウトをわずか1分に設定することはお勧めしません。それは使いやすさを殺すつもりです!
ブライアンマッカーシー

3
私は短いタイムアウト期間の必要性を完全に理解しています。私の場合、セッションがタイムアウトした場合のサイトのユーザビリティと、ユーザーが戻ってきたときの反応をテストすることです。テストが難しいのは、セッションタイムアウトがすぐに発生しない限りデバッグも行うことです
Brett Weber

回答:


323

タイムアウトを20分に設定する場合は、次のようなものを使用します。

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>

16
20分か数時間?(timeout = "20")
Muhammad Awais

21
Configはタイムアウトを分単位で20分と述べています
Wolfwyrd

50

あなたが設定された値timeout属性は、セッションタイムアウト値を設定する正しい方法の一つです。

このtimeout属性は、セッションが放棄されるまでにアイドル状態でいられる分数を指定します。この属性のデフォルト値は20です。

この属性に値1を割り当てることで、アイドル状態の1分後にセッションが破棄されるように設定しました。

これをテストするには、単純なaspxページを作成し、このコードをPage_Loadイベントに記述します。

Response.Write(Session.SessionID);

ブラウザを開いて、このページに移動します。セッションIDが出力されます。1分が経過するのを待ってから、更新を押してください。セッションIDが変更されます。

さて、私の推測が正しければ、セッションがタイムアウトしたらすぐにユーザーをログアウトさせる必要があります。これを行うには、ユーザーの資格情報を検証するログインページを作り、次のようなセッション変数を作成します-

Session["UserId"] = 1;

今、あなたはこのようなこの変数のためにすべてのページでチェックを実行する必要があります-

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

これは、これがどのように機能するかを示す最低限の例です。

ただし、プロダクション品質の安全なアプリを作成するには、ASP.NETによって提供されるRoles&Membershipクラスを使用します。これらは、使用しようとしている通常のセッションベースの認証よりもはるかに信頼性の高いフォームベースの認証を提供します。


素晴らしいアドバイス... Response.Write(Session.SessionID);でテストする前に、まずセッション変数を設定してください。それ以外の場合は、更新するたびに新しいIDで更新されます。
Chris Catignani

1

MVCを使用している場合は、Viewsディレクトリのweb.configではなく、Webアプリケーションのルートディレクトリのweb.configファイルにこれを配置します。また、彼の質問で述べたGeorge2のようにではなく、system.webノード内にある必要があります。「web.configのsystem.webセクションの下に書き込みました」

タイムアウトパラメータ値は分を表します。

sessionState要素で設定できる属性は他にもあります。ここで情報を見つけることができます:docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

その後、次のメソッドを追加することで、Global.asaxファイルで新しいセッションの開始をキャッチできます。

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}

0

でこれを使用してくださいweb.config

<sessionState 

  timeout="20" 
/>

30
リストするほとんどの属性は必要ありませんtimeoutstateConnectionStringそしてsqlConnectionString時に無視されているmode="InProc"、との値modecookielessそのデフォルト値に設定されています。だから、これはウルフヴィルドの答えに本当に蒸留されます。
アーケーン

0

で機能しない場合はweb.config、IISから設定する必要があります。

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