Это действительно зависит от желаемой функциональности, которую вы ищете. Я предполагаю, что вы используете FormsAuthentication.
Есть две отдельные вещи, о которых вам нужно беспокоиться: Session и FormsAuthentication cookie. Если я не ошибаюсь, у обоих из них есть отдельные таймауты.
Если проблема заключается в том, что время сеанса истекло, но пользователь все еще аутентифицирован, вы можете попробовать комбинацию из следующих:
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 !