Тайм-аут проверки подлинности форм и тайм-аут сеанса
в моем asp.net сайт, который я использую asp.net проверка подлинности формы со следующей конфигурацией
<authentication mode="Forms">
<forms loginUrl="~/Pages/Common/Login.aspx"
defaultUrl="~/Pages/index.aspx"
protection="All"
timeout="30"
name="MyAuthCookie"
path="/"
requireSSL="false"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false" >
</forms>
</authentication>
У меня есть следующие вопросы
каким должно быть значение тайм-аута для сеанса, потому что я использую скользящий срок действия внутри проверки подлинности формы, из-за которого сеанс истечет до проверки подлинности формы. Как я могу его защитить?
после выхода из системы formauthentication я хотел бы перенаправить страницу при выходе из системы.aspx, а это автоматически перенаправить меня на loginpage.aspx. Как это возможно?
2 ответа:
- чтобы быть в безопасности: тайм-аут (сеанс)
- Если вы хотите показать страницу, отличную от указанной в атрибуте loginUrl после тайм-аута аутентификации, вам нужно обработать это вручную, как ASP.NET не предоставляет способ сделать это.
для достижения #2 Вы можете вручную проверить cookie и его AuthenticationTicket для истечения срока действия и перенаправить на свою пользовательскую страницу, если они истекли.
Вы можете сделать это в одном из события: AcquireRequestState,AuthenticateRequest.пример кода в этом случае может выглядеть так:
// Retrieve AuthenticationCookie var cookie = Request.Cookies[FormsAuthentication.FormsCookieName]; if (cookie == null) return; FormsAuthenticationTicket ticket = null; try { ticket = FormsAuthentication.Decrypt(cookie.Value); } catch (Exception decryptError) { // Handle properly } if (ticket == null) return; // Not authorised if (ticket.Expiration > DateTime.Now) { Response.Redirect("SessionExpiredPage.aspx"); // Or do other stuff here }
для сайтов, имеющих зависимость от сеанса, вы можете просто выйти из устаревшей аутентификации с событием запуска сеанса в глобальном масштабе.асакс:
void Session_Start(object sender, EventArgs e) { if (HttpContext.Current.Request.IsAuthenticated) { //old authentication, kill it FormsAuthentication.SignOut(); //or use Response.Redirect to go to a different page FormsAuthentication.RedirectToLoginPage("Session=Expired"); HttpContext.Current.Response.End(); } }
это делает его так, что новый сеанс = новая аутентификация, период.