2014-04-10 199 views
4

在我AccountController我有以下的Login方法:如何在ASP.NET MVC 5中設置Forms Auth Cookie過期時間?

var claims = new List<Claim>(); 
claims.Add(new Claim(ClaimTypes.Name, model.UserName)); 
AuthenticationManager.SignIn(
    new AuthenticationProperties { IsPersistent = model.RememberMe, 
           ExpiresUtc = expiry }, 
    new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie)); 

其中expiry是計算DateTimeOffset值。

不管我爲expiry設置了什麼值,.AspNet.ApplicationCookie的到期時間總是14天。

有什麼辦法可以自定義這個過期值嗎?

它與https://katanaproject.codeplex.com/workitem/115有關嗎?

請注意,在Startup.Auth.cs中,我沒有ExpireTimeSpan屬性集。當我確定財產的價值受到尊重時,上述方法仍然無能爲力。

回答

2

這是固定在this commit年04月16,2014年

protected override async Task ApplyResponseGrantAsync() 
    ... 
    DateTimeOffset issuedUtc = Options.SystemClock.UtcNow; 
(-) DateTimeOffset expiresUtc = issuedUtc.Add(Options.ExpireTimeSpan); 
    context.Properties.IssuedUtc = issuedUtc; 
(-) context.Properties.ExpiresUtc = expiresUtc; 
(+) if (!context.Properties.ExpiresUtc.HasValue) 
(+) { 
(+)  context.Properties.ExpiresUtc = issuedUtc.Add(Options.ExpireTimeSpan); 
(+) } 

    Options.Provider.ResponseSignIn(context); 

    if (context.Properties.IsPersistent) 
    { 
(+) DateTimeOffset expiresUtc = context.Properties.ExpiresUtc ?? issuedUtc.Add(Options.ExpireTimeSpan); 
     cookieOptions.Expires = expiresUtc.ToUniversalTime().DateTime; 
    } 
+1

我想指出的是,有人可能會遇到,如果他們正在調試cookie有效期與Owin一兩件事。顯然,驗證cookie過期的時間間隔由CookieAuthenticationProvider.OnValidateIdentity屬性定義。從使用OWIN標識的MVC5模板創建的項目設置的時間間隔爲30分鐘。所以auth cookie可能已經過期,但不會超時用戶的會話,直到該時間間隔被擊中。修改此問題的代碼位於Startup.Auth.cs的ConfigureAuth方法中:'validateInterval:TimeSpan.FromMinutes(30)' –

相關問題