2014-11-24 55 views

回答

5

這是可能的。一種方法是使用OnValidateIdentity回調函數,每次對cookie進行身份驗證時都會調用該回調函數,每次向Web應用程序發出請求(假定爲活動模式)時都會調用該回調函數。

var options = new CookieAuthenticationOptions 
{ 
    // usual options such as LoginPath, for example, go here... 
    LoginPath = new PathString("/Account/Login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     OnValidateIdentity = context => 
     { 
      DateTimeOffset now = DateTimeOffset.UtcNow; 

      context.OwinContext.Request.Set<double>("time.Remaining", 
        context.Properties.ExpiresUtc.Value.Subtract(now).TotalSeconds); 

      return Task.FromResult<object>(null); 
     } 
    } 
}; 

app.UseCookieAuthentication(options); 

在這裏,我存儲OWIN環境字典中剩餘的秒數。您可以在任何可以訪問字典的地方使用它,並通知用戶。例如,從MVC控制器,你可以做這樣的事情。

[Authorize] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var secondsRemaining = (double)Request.GetOwinContext() 
             .Environment["time.Remaining"]); 

     // Do what you want to do with the secondsRemaining here... 

     return View(); 
    } 
} 
+0

在重新發布cookie之前調用'OnValidateIdentity'。當使用滑動會話時,這意味着所報告的到期時間在Cookie被擴展的請求上是錯誤的,並且僅對後續請求是正確的。 – Justin 2016-03-23 16:47:16

相關問題