Тайм-аут проверки подлинности форм и тайм-аут сеанса


в моем 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>

У меня есть следующие вопросы

  1. каким должно быть значение тайм-аута для сеанса, потому что я использую скользящий срок действия внутри проверки подлинности формы, из-за которого сеанс истечет до проверки подлинности формы. Как я могу его защитить?

  2. после выхода из системы formauthentication я хотел бы перенаправить страницу при выходе из системы.aspx, а это автоматически перенаправить меня на loginpage.aspx. Как это возможно?

2 57

2 ответа:

  1. чтобы быть в безопасности: тайм-аут (сеанс)
  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();
  }

}

это делает его так, что новый сеанс = новая аутентификация, период.