Обработка сессии в asp.net - PullRequest
9 голосов
/ 28 марта 2011

Я пытаюсь выяснить, как уничтожить сеанс ASP.NET, когда пользователь уходит с моего сайта. Я использую файл приложения Global.ascx и использую событие session_end. Работает нормально, когда я нажимаю кнопку выхода из системы. Но когда я закрываю браузер напрямую, он не использует Глобальный файл через 20 минут. я использовал в файле web.conig как <sessionState mode="InProc" timeout="20"></sessionState>
Пожалуйста, помогите мне
Augustine

Ответы [ 5 ]

7 голосов
/ 28 марта 2011

Время ожидания сеанса определяет, когда какой-либо сеанс будет разрушен после некоторого времени простоя.

Если вы хотите больше контроля над сеансами, вам нужно будет использовать режим SQLServer, режим State Server или пользовательский режим taylored самостоятельно.

Я имею в виду, что, например, в режиме SQLServer сессии хранятся в стандартной таблице SQL Server, поэтому вы можете реализовать какое-то задание SQL Server или запланировать какое-то задание в Windows или в какой-либо службе Windows, так что выможет очищать сеансы в зависимости от ваших потребностей.

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

Я повторяю, если вам нужен лучший режим управления сеансом, подобный тому, который я вам предложил.


РЕДАКТИРОВАТЬ:

Проверьте эту страницу: http://aspalliance.com/520_Detecting_ASPNET_Session_Timeouts.2

Вы узнаете, как лучше обрабатывать тайм-ауты сеанса, так как Session_End не вызывается, когда истекает сеанс, но когда вызвоните "Session.Abandon".

4 голосов
/ 28 апреля 2011

Вы можете использовать режим чтения SQLServer в режиме inProc

4 голосов
/ 28 марта 2011

Браузер не отправляет сигнал на сайт, когда посетитель «уходит» или «закрывает свой браузер».Поэтому asp.net (или любая другая серверная технология) не может отреагировать на это, чтобы уничтожить сеанс.

Вот почему сеанс работает с таймаутом: если пользователь не выполняет запрос в течение тайм-аутапериод, то он должен был прекратить сеанс, даже когда он просто читал эту страницу в течение 20+ минут.

3 голосов
/ 28 марта 2011

Создайте новую страницу, которая вызывает сеанс. Завершите загрузку страницы и закройте страницу (Window.Close ()), используя RegisterClientScriptBlock.Вызовите это окно новой страницы. Расположение при выгрузке текущей страницы с использованием Javascript.

1 голос
/ 28 марта 2011

вы можете убить сессию, вызвав Session.Abandon()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...