2012-02-14 19 views
1

MVC3アプリケーションで組み込みのフォーム認証を使用しています。私が現在直面している問題は、クッキーslidingexpirationが機能していないということです。MVC3クッキーの有効期限が切れていない

のweb.configファイルは以下の行があります

<forms loginUrl="/auth" name="authy" path="/" slidingExpiration="true" /> 

ノートを::私はデフォルトはtrueであってもslidingexpirationを宣言しました。

私のコードの中で、私は基本的なMembership Providerクラスを拡張または変更せずに使用しています。私のglobal.asaxファイルがシステムのデフォルトを使用しています。

コード例を追加することは意味がありません。これは、単なる基本プロジェクトであり、余分なコードが追加されていないためです。私は最初にクッキーを設定するのにFormsAuthentication.SetAuthCookie(username, true);を使用しています。 documentationから

答えて

2

引用:要求が行われ、より タイムアウト間隔の半分以上が経過した場合

有効期限をスライディングは、有効な 認証Cookieの有効期限をリセットします。 Cookieが期限切れになった場合、ユーザーは の再認証を行う必要があります。 SlidingExpirationプロパティをfalseに設定すると、 値に基づいて、 の認証Cookieが有効な時間を制限することによって、アプリケーションのセキュリティを向上させることができます。

2本の引用に気づくために非常に重要な事柄:

  1. ... を要求が行われた場合...
  2. ...タイムアウト間隔の半分.. ..

タイムアウトを指定していないので、デフォルト値の30分が使用されます。

この引用に注意すべきもう一つの重要な事柄:falseにSlidingExpirationプロパティを設定

が セキュリティ

を向上させることができますが、私はあなたがアクティブ化したので、あなたはセキュリティを気にしないと思いますそれ。


UPDATE:

はここ概念を示す完全な例です:

コントローラー:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     FormsAuthentication.SetAuthCookie("foo", true); 
     return View(); 
    } 

    [Authorize] 
    public ActionResult Foo() 
    { 
     return Json(User.Identity.Name + " is still authenticated", JsonRequestBehavior.AllowGet); 
    } 
} 

ビュー:

<script type="text/javascript"> 
    $(function() { 
     (function() { 
      var caller = arguments.callee.caller; 
      window.setTimeout(function() { 
       $.getJSON('@Url.Action("foo")', function (result) { 
        $('#msg').append($('<div/>', { text: result })); 
        caller(); 
       }); 
      }, 10000); 
     })(); 
    }); 
</script> 

<div id="msg"></div> 

web.configファイル:

<authentication mode="Forms"> 
    <forms 
     loginUrl="/auth" 
     name="authy" 
     path="/" 
     slidingExpiration="true" 
     timeout="1" 
    /> 
</authentication> 

インデックスビューにとどまっても、ユーザーは引き続き認証されます。

+0

申し訳ありませんリクエストが必要であり、タイムアウト期間の半分以下である必要があることを理解します。しかしこれでもクッキーは期限切れとなり、有効期限は更新されません。 –

+0

@aspect、まあ、わかりません。これは、ドキュメントに記載されているとおり、いつも私のために働いてきました。だからあなたは何か違ったことをしているに違いない。とはいうものの。また、私は次の事実に重点を置いています:**タイムアウトの半分以上**、**あなたのコメントに記載した**タイムアウトの半分以下**。クッキーが更新されると予想される場合は、タイムアウト期間の半分が経過した後にリクエストを送信する必要があります。実際にクッキー値の変更が表示される前に15分待たなければなりません。 –

+0

それは私が意味したこと、私はそれがどのように動作しなければならないことが問題を動作させるべきか理解しています。私は誰かが私にそれがうまくいかなければならないかを教えるのではなく働かない理由について私に洞察を与えることができることを望んでいた。 –

0

web.configフォームの属性にcookieless="UseCookies"を追加すると、スライド有効期限が現在機能しています。私はこれがどのように違いを生むかもしれないが、何かをしたことを理解していない。私はそれがそれらの癖の一つに過ぎないと思う。

+0

私の更新プログラムがうまく動作するかどうかを確認できますか? –

+0

私はそれを秒で試してみます、ありがとう:-) –

0

スライドの有効期限が切れていた問題がありました。

パスが正しく設定されていません。

関連する問題