4
我使用Owin的cookie身份驗證在一段時間不活動後註銷用戶。問題是,我需要讓用戶知道他們的會話以'X'分鐘結束。訪問Owin Cookie身份驗證的ExpireTimeSpan屬性以通知用戶登錄失效
如何訪問身份驗證Cookie以獲取剩餘時間?這甚至有可能嗎?有沒有人有過這樣的事情?
我使用Owin的cookie身份驗證在一段時間不活動後註銷用戶。問題是,我需要讓用戶知道他們的會話以'X'分鐘結束。訪問Owin Cookie身份驗證的ExpireTimeSpan屬性以通知用戶登錄失效
如何訪問身份驗證Cookie以獲取剩餘時間?這甚至有可能嗎?有沒有人有過這樣的事情?
這是可能的。一種方法是使用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();
}
}
在重新發布cookie之前調用'OnValidateIdentity'。當使用滑動會話時,這意味着所報告的到期時間在Cookie被擴展的請求上是錯誤的,並且僅對後續請求是正確的。 – Justin 2016-03-23 16:47:16