none
Web.configのauthentication要素のslidingExpiration属性について RRS feed

  • 質問

  • ASP.NET / C# / Framework2.0

    Web.configのauthentication要素のslidingExpiration属性について疑問があります。

    http://msdn2.microsoft.com/ja-jp/library/1d3t3c61.aspx

    MSDNを参照すると、slidingExpiration="true"にしたときは、
    アクセスするたびに認証の有効期限がリセットされるとあります。
    しかしテスト用に以下の設定のようにして確認してみたのですが、
    予想とは異なる動作をしてしまいます。

    <authentication mode="Forms">
        <forms
            name="MyApplication"
            loginUrl="~/login.aspx"
            defaultUrl="~/top.aspx"
            timeout="2"
            slidingExpiration="true"
        />
    </authentication>

    <sessionState
        mode="StateServer"
        stateConnectionString="tcpip=127.0.0.1:42424"
        cookieless="false"
        timeout="2"
    />


    上記の設定で、下の(1)~(3)を行います。
    (1)ログインしてから1分以内に何度かアクセスする
    (2)ログイン後1~2分の間は何もしない
    (3)ログイン後2分以降(ただし(1)の最後のアクセスから2分以内)にアクセスする。

    予想では(1)でアクセスを行うたびに認証の有効期限がリセットされる(=2分に戻る)ので
    (3)でもアクセス可能、と思っていたのですが、
    実際には(3)でlogin.aspxに遷移されてしまいます。

    こういう仕様なのか、設定が間違っているのか、見当がつきません。
    ご教授をお願いします。

     

    2006年10月23日 13:05

すべての返信

  • (1)ログインしてから1分以内に何度かアクセスする
    (2)ログイン後1~2分の間は何もしない
    (3)ログイン後2分以降(ただし(1)の最後のアクセスから2分以内)にアクセスする。

    slidingExpiration 属性で設定されるFormsAuthentication.SlidingExpiration プロパティの説明には以下のようにあります。

    スライド式有効期限は、要求が発生し、タイムアウト間隔が半分以上過ぎていた場合、有効な認証 Cookie の有効期限をリセットします。

    ですので、タイムアウトを2分とした場合はログイン後1~2分の間にアクセスすると更新されるということです。

    2006年10月27日 12:03
  • あ、timeout 属性のほうにわかりやすいとはいえないですが書いてありますね。

    Cookie のタイムアウトまでの時間を整数の分の値で指定します。SlidingExpiration 属性が true の場合、timeout 属性は変化する値です。最後の要求を受信してから指定した時間 (分単位) が経過するとタイムアウトします。パフォーマンスの低下を防ぎ、Cookie 警告が有効になっているユーザーに対して複数のブラウザ警告が出力されないようにするために、指定した時間の半分が経過すると Cookie は更新されます。これにより、精度が低下する可能性があります。永続的な Cookie がタイムアウトすることはありません。

    2006年10月27日 12:10
  • slidingExpiration="true"にしたとき、
    アクセスの度に認証の有効期限がリセットされるのではなくて、
    指定した時間の半分が経過した後アクセスをした場合にリセットされるようですね。
    MSDNドキュメントの記述はおかしいと思いますが、そういう仕様なんでしょうね。
    2006年10月31日 6:07
  •  suwa さんからの引用

    指定した時間の半分が経過した後アクセスをした場合にリセットされるようですね。
    MSDNドキュメントの記述はおかしいと思いますが、そういう仕様なんでしょうね。
     
    ご自身で引用された内容に、はっきり書いてあると思うんですが、
     
    ユーザーに対して複数のブラウザ警告が出力されないようにするために、指定した時間の半分が経過すると Cookie は更新されます。これにより、精度が低下する可能性があります。
     
    これが、意味を読み取りにくいようなら Feedback に投げるとよいかもしれません。
    自分の周りだけだと「クッキーの保存をするときに毎回確認ダイアログを出してるユーザなんていないよ」という気がするんですけど、Form でのデータの送信の警告をでるままにしてる人がいるぐらいなので、クッキーもいるんでしょうねえ、やっぱり。
     
    2006年11月5日 15:57