Как установить скользящий срок действия в приложении MVC 5
У меня есть приложение, построенное с использованием MVC 5, у нас есть сценарий, в котором пользователи перенаправляются на страницу входа, когда тайм-аут сеанса по умолчанию истек, даже когда пользователь все еще набирал текстовое поле. Я хочу, чтобы пользователи перенаправлялись на страницу входа только тогда, когда страница простаивает более 15 минут, но не тогда, когда пользователи очень заняты. В веб-формах мы используем для установки скользящего истечения срока действия значение true в конфигурационном файле, но это не работает в MVC. Я буду признателен за любую помощь.
Что я уже пробовал:
Действие Входа В Систему:
[HttpPost] [AllowAnonymous] public ActionResult Login(LoginViewModel model, string returnUrl, string command) { string decodedUrl = ""; if (!string.IsNullOrEmpty(returnUrl)) decodedUrl = Server.UrlDecode(returnUrl); FormsAuthentication.SetAuthCookie(model.Email, false); var authTicket = new FormsAuthenticationTicket(1, user.Email, DateTime.Now, DateTime.Now.AddMinutes(15), false, user.Roles); string encryptedTicket = FormsAuthentication.Encrypt(authTicket); var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); HttpContext.Response.Cookies.Add(authCookie); authCookie.Expires = authTicket.Expiration; if (Url.IsLocalUrl(decodedUrl)) { return Redirect(decodedUrl); } else { return RedirectToAction("analytics", "dashboard"); } }
Глобальный код ASAX:
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e) { try { var authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; if (authCookie != null) { FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); if (authTicket != null && !authTicket.Expired) { var roles = authTicket.UserData.Split(','); HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(authTicket), roles); } } } catch(Exception ex) { } }
Richard Deeming
Скользящее истечение срока действия также не имело бы никакого эффекта в веб-формах. Тайм-аут сеанса продлевается только тогда, когда запрос попадает на сервер. Если вы не настроили обработчик событий Javascript, это обычно не происходит, когда пользователь печатает на странице.
Uwakpeter
спасибо, сэр, теперь я понимаю, как это работает на самом деле.