Alex2 101 Ответов: 2

Как очистить идентификатор сеанса пользователя при закрытии окна браузера в C# 3.5?


Я хочу очистить идентификатор сеанса вошедшего в систему пользователя при закрытии окна браузера того же самого после входа в систему asp.net с серверной стороной c# 3.5. После входа в систему с учетными данными, если в случае закрытия окна браузера сеанс должен быть очищен. Используемый браузер-Internet Explorer.

Что я уже пробовал:

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

2 Ответов

Рейтинг:
1

F-ES Sitecore

Это невозможно, так как сервер не знает, что пользователь закрыл свой браузер. Если браузер закрылся, то файл cookie сеанса исчез, так что сеанс больше не может быть истек и все равно будет тайм-аут, вот как работают сеансы.


Рейтинг:
1

HeatherAtWork

Есть несколько интересных статей об использовании Javascript для определения того, когда вкладка/браузер закрыта. Итак, если бы вы могли попробовать использовать какой-нибудь Javascript на своей веб-странице вместо использования C# в бэкэнде? Одна из статей, которую я нашел, была о переполнении стека javascript-попытка обнаружить событие закрытия браузера - переполнение стека[^]


Richard Deeming

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

Нет надежного способа определить, когда окно / вкладка браузера действительно закрывается. И даже если бы это было так, не было бы никакого способа узнать, был ли ваш сайт открыт в любом другом окне или вкладке В то время.

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

HeatherAtWork

Я не уверен в реализации ОП, но это может быть проблема безопасности в качестве причины тайм-аута сессии. Это риск, если сеанс все еще действителен после того, как пользователь закрывает браузер и другой пользователь с другими правами входит в систему.

Я согласен, что javascript route detect when the tab has "lost focus" далек от идеала, но ждать тайм-аута тоже не стоит. Может быть, подсказка, когда он потерял фокус по какой-либо причине, попросив пользователя выйти из системы перед выходом из браузера, будет обходным путем? Это будет раздражать пользователя - но если он ключ безопасности, это может быть способ быть более безопасным?

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

(Я никогда не люблю говорить, что вещи невозможны, всегда есть какой-то способ заставить вещи работать каким-то образом) :)

Richard Deeming

Но если другой пользователь входит в систему и все еще имеет тот же сеанс, то браузер никогда не закрывался. :)

Если только вы не говорите о злоумышленнике, который перехватил сеансовые и аутентификационные файлы cookie и теперь использует эти файлы для выполнения своих собственных запросов к учетной записи пользователя? Это гораздо более интересная проблема.

HeatherAtWork

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

Richard Deeming

Но в любом здравомыслящий система, сессия сервера привязана к браузеру с помощью "сессионного куки-файла" (он же: временный файл cookie).

Сессионные файлы cookie удаляются сразу же после закрытия окна браузера. Таким образом, даже на общем компьютере, где два пользователя используют один и тот же логин ОС, как только первый пользователь закроет браузер, второй пользователь получит совершенно другой сеанс.

(Если они используют разные логины ОС, то они не будут делиться ими какой-нибудь cookies. Таким образом, второй пользователь по-прежнему не может захватить сеанс первого пользователя.)

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

HeatherAtWork

Я верю, что вы правы, но мы вышли за рамки первоначального вопроса :)

Я думаю, что здесь есть немного причуд, когда дело доходит до сеансов, особенно когда вы говорите об общих средах (в комплекте с активным каталогом и единой системой единого входа), файлах cookie, вкладках, браузерах ... Например, в системе, которую я сейчас использую даже если файлы cookie удалены и вкладка закрыта, если я снова открываю определенный сайт, я все равно вхожу в систему, если я закрываю только вкладку или даже окно браузера. ЭТО находится в Chrome, и у меня он настроен на то, чтобы не удалять сеанс, когда я закрываю браузер (сохраняйте локальные данные только до тех пор, пока вы не закроете браузер, не выключен). Конечно, у меня был другой пользователь браузера в другом окне, все еще открытом, так что это ВСЕ окна браузера ... поэтому выход из окон приведет к выходу из всего браузера и закрытию сеанса :)

Так что опять - таки-вы правы. но я все еще верю в то, что нельзя говорить, что нельзя сделать. Нет никакого "решения", но есть несколько (не вызывающих восторга) обходных путей.

Также-Спасибо за отличную дискуссию :)