Как выйти из системы по истечении или окончании сеанса - PullRequest
12 голосов
/ 11 декабря 2010

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

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

Ответы [ 2 ]

12 голосов
/ 11 декабря 2010

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

1 голос
/ 11 декабря 2010

Если вы используете поставщик членства .net, просто установите параметр Timeout в web.config http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=VS.100).aspx

...