Как получить список активных сессий в веб-приложении? - PullRequest
1 голос
/ 30 января 2012

Я пытаюсь получить список активных идентификаторов сеансов в моем веб-приложении.

Я пытался управлять списком в Global.asax. Я добавляю идентификатор сессии, когда запускается Session_Start, и удаляю идентификатор сессии, когда запускается Session_End.

Проблема в случаях, когда пользователь закрывает браузер или выключает компьютер. Session_End не запущен, а видение все еще существует в списке.

У кого-нибудь есть идея, как я могу получить список?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 30 января 2012

Существует нет решения этой проблемы, которое позволяет избежать осложнений, которые вы заметили.Если не существует какого-либо явного способа завершить сеанс пользователя - и пользователь активирует его - единственный способ узнать, когда сеанс закончился, - дать ему возможность истечь.

Session_End в конечном итоге сработает, когда время сеанса истечет.Единственный раз, когда вы никогда не видите Session_End, вы вызывали, когда сам домен приложения неожиданно завершает работу.В таком случае вы знаете, что все ваших сессий в любом случае мертвы.

1 голос
/ 22 февраля 2012

Эндрю Барбер прав. Есть еще одна вещь, которую вы можете сделать:

  • Попросите пользователей выйти из системы. На самом деле не просто спросить их, а заставить / напомнить им, что они должны выйти.

Вот как я это сделал:

<script type="text/javascript">
    $(function () {
        $("a").click(function () {
            window.onbeforeunload = null;
        });
    }); 
</script>

<script type="text/javascript">
    window.onbeforeunload = confirmExit;
    function preConfirm() {
        if ((window.event.clientX < 0) || (window.event.clientY < 0)) {
            confirmExit();
        }
    }
    function confirmExit() {
        return "You have attempted to leave this page.  It is suggested to log out using the link.  Are you sure you want to exit this page?";
    }
</script>

Добавляя эти сценарии на главную страницу (если это так или на каждой странице), браузер запрашивает у пользователя модальное окно с вашим сообщением, если они пытаются загрузить другую страницу или закрыть браузер, не выходя из системы.

Конечно, пользователь может в любом случае покинуть страницу, даже если вы напоминаете ему журнал, но на самом деле вы старались изо всех сил !!

1 голос
/ 30 января 2012

Если вы используете базу данных SQL Server для хранения своих сессий, вам будет проще найти то, что выглядит активным в данный момент, используя запрос SQL, чтобы получить то, что вам нужно.

Iскажем, появляется , потому что, как и другие отмеченные, сеансы могут зависать, если они не очищены должным образом с помощью Session.Abandon(), например, если пользователь просто закрывает окно браузера без выхода из системы.Это означает, что вы можете полагаться только на дату окончания сессии, чтобы быть уверенным, что сессия полностью завершена, как бы долго вы ее ни устанавливали.

Я также должен указать, что если вы используетебаза данных как хранилище сеансов, событие Session_End никогда не сработает.

...