Рейтинг:
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, и у меня он настроен на то, чтобы не удалять сеанс, когда я закрываю браузер (сохраняйте локальные данные только до тех пор, пока вы не закроете браузер, не выключен). Конечно, у меня был другой пользователь браузера в другом окне, все еще открытом, так что это ВСЕ окна браузера ... поэтому выход из окон приведет к выходу из всего браузера и закрытию сеанса :)
Так что опять - таки-вы правы. но я все еще верю в то, что нельзя говорить, что нельзя сделать. Нет никакого "решения", но есть несколько (не вызывающих восторга) обходных путей.
Также-Спасибо за отличную дискуссию :)