2012-10-08 7 views
5

私はASP.NETの「セッション」と「フォーム認証」の違いを理解していると思います。セッションは基本的に、そのユーザーのセッションに固有の情報(検索フィルターの状態など)を格納するために使用され、フォーム認証は特定のものにアクセスする必要があることを覚えています。なぜフォーム認証タイムアウトをセッションタイムアウトより長く設定するのですか?

私の質問は、フォームの認証タイムアウトをセッションのタイムアウトよりも長くすることが望ましい理由は何ですか?実際、デフォルトでは、web.configはフォーム認証のタイムアウトをと長く設定します。

  1. セッション回認証がないフォームの前に:ここで

    は、私が見る2つのシナリオがあります。ユーザーは検索フィルターのようなものを失いますが、セキュリティ保護されたページは引き続き表示されますが、状況が異なるように見えたり、さまざまなことがリセットされる可能性があります。さらに、開発者はセッションを使用するたびにnullになることを心配する必要があります。

  2. セッションの前にフォームの認証がタイムアウトします。ユーザーはユーザー名とパスワードを再入力する必要がありますが、セッション情報は元のページに戻ります(タイムアウトしていない限り)。開発者は、ログイン時に1つの場所でnullというセッションを心配する必要があり、必要に応じてそこで初期化することができます。

シナリオ1)がもっと望ましい理由は何ですか?何か不足していますか?

答えて

5

セッションタイムアウトは、他よりも重要な設定です。認証タイムアウトを非常に長い期間に設定しても、サーバーリソースのWebアプリケーションには影響しません。しかし、Session timeoutを長い期間に設定すると、ステークスが大きい場合にメモリの問題が発生する可能性があります。

あなたの声明についてはあなたが正しいです。開発者として私は2より1を好むだろう。しかしセッションの有効期限を扱う簡単な方法がある。このSO questionをチェックしてください。答えの1つは、セッションの有効期限切れに対する良い解決策です。

protected void Session_Start(Object sender, EventArgs e) 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut();       
     Response.Redirect("~/SessionEnd.aspx"); 
    } 
} 

この方法で期限切れのセッションを1か所で処理できます。

+1

Webアプリケーションのあるクラスで*すべての 'Session'アクセスを行うのは非常に良いアイデアであり、そのクラスは常に' Session'がヌルかどうかを確認し、必要ならばそれを再初期化します。 – Jez

関連する問題