2012-02-14 41 views
1

我在MVC3應用程序中使用內置的Forms身份驗證。我目前面臨的問題是Cookie slidingexpiration不起作用。MVC3不能正常工作的Cookie的過期

的web.config文件有以下行:

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

注::我宣佈slidingexpiration即使默認爲真。

在我的代碼中,我使用基本的Membership Provider類,沒有擴展或修改。我的global.asax文件正在使用系統默認值。

添加代碼示例毫無意義,因爲這只是一個沒有額外添加代碼的基礎項目。我最初使用FormsAuthentication.SetAuthCookie(username, true);來設置Cookie。從documentation

回答

2

引用:如果發出請求時,超過一半的 超時間隔的已經經過了一個有效 認證cookie

滑動期滿復位到期時間。如果cookie過期,則用戶必須重新驗證 。根據配置的超時值 值,通過將 認證cookie有效的時間限制爲 ,可以將SlidingExpiration屬性設置爲false,從而提高應用程序的安全性。

2個在這句話要注意很重要的東西:如果

  1. ... 的請求時 ...
  2. ... 一半超時間隔的.. ..

您尚未指定超時,因此將使用默認值30分鐘。

在這句話要注意另一個重要的事情:

的SlidingExpiration屬性設置爲false可以提高 安全

,但我猜你不關心安全性,因爲您已激活它。


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

道歉我明白需要做出一個請求,並且它需要在超時時間的一半以下。但即使如此,cookie仍然過期,到期時間也沒有更新。 – 2012-02-14 10:40:51

+0

@aspect,恩,我不知道。這一直對我來說正如文檔所述。所以你必須做一些不同的事情。雖然說。我還強調以下事實:**超過一半的超時**,而不是超過一半的超時**,如您在評論中所述。如果您希望更新cookie,則必須在超過一半的超時時間後才發送請求,另外a.k.a則需要等待15分鐘才能看到cookie值更改。 – 2012-02-14 10:42:12

+0

這就是我的意思,我明白它應該如何工作的問題是它不應該如何工作。我希望有人能夠讓我洞察爲什麼它不工作,而不是告訴我它應該如何工作。 – 2012-02-14 10:45:09

0

向web.config表單屬性添加cookieless="UseCookies"。滑動失效現在正在工作。我不明白這可能會有什麼影響,但它已經做了些什麼。我想這只是其中的一個怪癖。

+0

你能否看到我的更新是否適合你? – 2012-02-14 11:01:07

+0

我會在一秒鐘內嘗試一下,謝謝:-) – 2012-02-14 11:07:11

0

我有一個問題,我的滑動過期不起作用。

我設置了錯誤的路徑。