Еще одна проблема с истечением срока действия билета проверки подлинности. Мне нужно использовать скользящее истечение, установленное в true. Я читал форумы и понимал проблему с потерей точности, что билет обновляется только в том случае, если запрос выполняется только после половины срока действия.
Проблема: В моем webconfig у меня есть следующее:
<authentication mode="Forms">
<forms timeout="20" name="SqlAuthCookie" protection="All" slidingExpiration="true" />
</authentication>
<sessionState timeout="20" />
<authorization>
Пользователь должен быть выведен из системы и перенаправлен только на login.aspx, только если запрос не был запрошен в 20-минутном интервале. Проблема в том, что пользователи делают запросы и все равно попадают на страницу входа. Этого не должно быть. То, что я думал делать, было для reset SqlAuthCookie вручную для каждого запроса.
Ниже мой код. Он вызывается в контексте .CquireRequestState.
void context_AcquireRequestState(object sender, EventArgs e)
{
HttpContext ctx = HttpContext.Current;
ResetAuthCookie(ctx);
}
private void ResetAuthCookie(HttpContext ctx)
{
HttpCookie authCookie = ctx.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null)
return;
FormsAuthenticationTicket ticketOld = FormsAuthentication.Decrypt(authCookie.Value);
if (ticketOld == null)
return;
if (ticketOld.Expired)
return;
FormsAuthenticationTicket ticketNew = null;
if (FormsAuthentication.SlidingExpiration)
ticketNew = FormsAuthentication.RenewTicketIfOld(ticketOld);
if (ticketNew != ticketOld)
StoreNewCookie(ticketNew, authCookie, ctx);
}
private void StoreNewCookie(FormsAuthenticationTicket ticketNew, HttpCookie authCookie, HttpContext ctx)
{
string hash = FormsAuthentication.Encrypt(ticketNew);
if (ticketNew.IsPersistent)
authCookie.Expires = ticketNew.Expiration;
authCookie.Value = hash;
authCookie.HttpOnly = true;
ctx.Response.Cookies.Add(authCookie);
}
Мои вопросы:
- Это неправильно или приемлемое решение, сбросив файл cookie по каждому запросу?
- Почему он все еще не работает? Кажется, что новый билет никогда не обновляется.
- Возможны ли другие причины, поскольку слишком скоро срок полномочий пользователей истекает, и я должен исследовать их?
Спасибо, С уважением,