Ответ 1
Это действительно зависит от желаемой функциональности, которую вы ищете. Я предполагаю, что вы используете FormsAuthentication.
Здесь нужно выделить две отдельные вещи: Сессия и файл FormsAuthentication. Если я не ошибаюсь, у обоих из них есть отдельные тайм-ауты.
Если проблема связана с тем, что сеанс завершен, но пользователь по-прежнему аутентифицирован, вы можете попробовать комбинацию из следующего:
1: Убедитесь, что cookie аутентификации имеет такое же значение тайм-аута, что и сеанс:
<authentication mode="Forms"><forms ... timeout="20" ... ><authentication>
<sessionState ... timeout="20" ... />
2: В событии Page_Load проверьте время ожидания сеанса:
if (context.Session != null && Context.Session.IsNewSession == true &&
Page.Request.Headers["Cookie"] != null &&
Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0)
{
// session has timed out, log out the user
if (Page.Request.IsAuthenticated)
{
FormsAuthentication.SignOut();
}
// redirect to timeout page
Page.Response.Redirect("/Timeout.aspx");
}
(см. http://www.eggheadcafe.com/articles/20051228.asp информацию об обнаружении таймаута сеанса)
Если вам нужен более приятный пользовательский интерфейс, вы можете использовать javascript для запуска своего рода модального пользовательского интерфейса после X минут. Это всплывающее окно просто позволит пользователю инициировать щелчок на кнопке, который приведет к возврату AJAX на сервере, тем самым расширяя их аутентификацию и cookie сеанса, без необходимости перезагрузки страницы. Я никогда не реализовывал это раньше, но смотрю, этот парень создал элемент управления ASP.NET AJAX!