Выход из системы (ASP.NET)

Я запрограммировал веб-сайт, подготовил механизм входа в систему (через текстовое поле, а не инструменты входа), пользователи хотят выйти из системы, они нажимают кнопку выхода. Однако моя проблема заключается в том, что если пользователи не нажимают кнопку выхода из системы, не закрывают веб-страницу или не переключают другую, как я могу понять эту ситуацию?
Согласно моему механизму, когда пользователи выходят из системы, в БД выполняются некоторые операции вставки и удаления. изготовление.
Я также хочу сделать это с закрытой страницей, переключите другую.
Спасибо.


person Irgat    schedule 17.05.2010    source источник
comment
Вам придется сделать это с помощью управления сеансом на бэкэнде... Вы не можете полагаться на пользователя или доверять какому-либо клиентскому коду, чтобы сделать это. Есть вещи, которые вы можете делать с помощью jquery/javascript, но вы никогда не можете быть уверены, что это когда-либо произойдет на стороне клиента.   -  person JoeGeeky    schedule 18.05.2010


Ответы (6)


Похоже, вы выполняете операцию БД при выходе из системы, и когда люди просто уходят, не нажимая кнопку выхода, код не срабатывает.

В вашем файле global.asax взгляните на session_end. Может быть, вы можете разместить свою операцию там.

protected void Session_End(Object sender, EventArgs e) 
{ 
    // Your code goes here. Since your logout code probably relied on the user being
    // logged in, you might end up checking Request.IsAuthenticated here. Why? Because
    // this event fires any time a session ends -- even if the user is not logged in! 
}

Обратите внимание, что если вы используете это, оно фактически срабатывает, когда сеанс IIS заканчивается, а не когда закрывается браузер. По умолчанию время сеанса истекает через 20 минут бездействия.

Как только вы это реализуете, вы можете вызвать Session.Abandon на странице выхода, что вызовет Session_End. Это кажется мне чистым.

Вот ссылка MSDN с более подробной информацией о событиях сеанса: http://msdn.microsoft.com/en-us/library/ms178583.aspx

person Brian MacKay    schedule 17.05.2010
comment
Конец сеанса - это действительно все, на что вы можете надеяться - person Andrew Bullock; 18.05.2010

Конец сеанса, вероятно, ваш лучший выбор, как упоминалось ранее, но если вы параноик, вы можете разместить на своей странице какой-нибудь javascript/AJAX, который пингует ваш сервер каждые X секунд, чтобы в основном сказать: «Я все еще здесь». Затем, если они уйдут, вместо того, чтобы ждать окончания сеанса целых 20 минут или около того, вы можете узнать в течение X секунд, что они ушли, поскольку они больше не пингуются.

person Joe Enos    schedule 17.05.2010

Если ваш время ожидания сеанса составляет 20 минут, вы обнаружите, что сеанс завершился только через 20 минут = пользователь покинул вашу страницу. Вы можете определить конец сеанса в global.asax session_end, как описывает Брайан.

Если вы хотите обнаружить, что кто-то покидает вашу страницу раньше, скажем, через минуту, вы можете уменьшить время ожидания сеанса до 1 минуты.

Проблема в том, что если пользователь ничего не делает на вашей странице - не отправляет сообщения на сервер - время его сеанса истекает, несмотря на то, что он все еще просматривает вашу страницу.

Чтобы обойти это, вы можете использовать механизм keep live. Ваша Страница будет регулярно обращаться к серверу в фоновом режиме, пока пользователь просматривает вашу страницу. Это можно сделать с помощью AJAX Javascript или других механизмов, таких как скрытый iFrame.

См., например: ASP.NET AJAX и поддержание сеанса в рабочем состоянии. Каков стандартный способ сделать это?

person PeterFromCologne    schedule 17.05.2010

Я не совсем уверен, но я думаю, что один из способов реализации этого заключается в том, чтобы не устанавливать срок действия файла cookie, что приведет к тому, что он будет файлом cookie сеанса, который будет потерян при закрытии браузера. Поскольку ваш файл cookie сеанса обычно содержит ключ сеанса, они, по сути, начнут новый сеанс, когда снова откроют браузер.

person AaronLS    schedule 17.05.2010

Когда я делаю пользователей системой, я добавляю в таблицу базы данных пользователей, которые вошли в систему (что-то вроде сеанса), и я дал им временную метку. При каждом обновлении сайта я запускаю запрос на удаление пользователей с отметкой времени старше 30 минут. Это очень простое решение, возможно, есть лучший способ.

person piotrek    schedule 17.05.2010

возможно, вы захотите проверить события в global.asax. Вы можете обновить БД с помощью события session_end. Вы также можете использовать событие beginrequest, которое запускается на каждой странице и элементе управления (вы получите несколько обращений на страницу, если у вас есть несколько элементов управления). Вы также можете поместить что-то в событие page_load.

person earthling    schedule 17.05.2010