Как выйти из системы, когда сеанс заканчивается или заканчивается

Каков наилучший способ выхода из системы, когда сеанс заканчивается или истекает?

Спасибо за любую помощь.

Ответы

Ответ 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!