Здесь есть две проблемы:
- Тайм-аут сеанса http
- Подключение сеанса базы данных
Кажется, вы смешиваете две концепции сеанса.
HTTP-сеанс
Вам необходимо дополнительно ознакомиться с механизмом http клиент-сервер.Закрытие браузера не закрывает сеанс http.Когда вы закрываете браузер, вы должны закодировать на своих страницах «при закрытии»."На близком" ??Абсолютно нет - в html / javascript нет такой вещи, как onclose.Но есть onunload (как и onload).
Почему в javascript / html нет «onclose»?Я думаю, что люди, которые изобрели http / html, были параноиками по многим непредвиденным обстоятельствам.Возможно, это правильно.Возможно, нам нужно понять образ мыслей и мотивацию изобретения html / http.Таким образом, у вас нет выбора, кроме как придумать цепную реакцию событий onunload.ONUNLOAD / ONLOAD - это события html-страницы, а не события браузера.Весь механизм HTML управляется страницей, а не браузером.Поэтому, когда вы закрываете браузер, он вызывает событие onunload для каждой вкладки в браузере.
Вам придется использовать страницу onunload, чтобы сообщить серверу, что пользователь намерен закрыть сеанс.В противном случае сервер должен зависеть от значения времени ожидания сеанса, чтобы завершить сеанс.Что если пользователь закроет браузер на одной из ваших страниц, на которой вы не написали код в событии onunload?Очень жаль - вот почему я написал «придумать цепную реакцию onunload» на каждой странице.Что очень утомительно и надоедливо.
Иногда.особенно для очень математических сервлетов серверу требуется много времени для ответа.Затем на странице клиента потребуется указание, чтобы отличить сервер, все еще обрабатывающий ответ, от сервера, который вышел из строя - тайм-аут сеанса, установленный в браузере.например, http://support.microsoft.com/kb/813827 (Как изменить значение времени ожидания сохранения по умолчанию в Internet Explorer).
Может быть, сервер должен время от времени тыкать в страницу браузера, чтобы проверить, работает ли браузерсессия еще жива.Нету.Http - технология вытягивания клиента.Сервер не может отправить ответы клиенту.Почему бы и нет?Почему так глупо?Вы должны прочитать весь http / html образ мыслей / паранойю, чтобы понять.Браузер может тыкать в сервер, но не наоборот.
Поэтому AJAX и комета были изобретены / придуманы.Имитировать, притворяться на сервере нажатием.С ajax у вас есть некоторые средства для сервера, чтобы psuedo-poke на клиенте.И это то, что вы должны сделать - используйте ajax, например, jquery или gwt.Я предпочитаю gwt.
Что если на клиентском компьютере произошел сбой питания, или ОС коснулась синего экрана, или процесс браузера был внезапно прерван?Не было бы возможности вызвать событие onunload ни для одной из страниц.
Сеанс соединения с базой данных
Ответ Алекса ударил по гвоздю - пул соединений.Однако бывают ситуации, когда мне нужно иметь соединение с базой данных на сеанс.Хммм ... как мне это сделать?Да, я сохраняю соединение как атрибут сеанса.Следовательно, будет столько же соединений с БД, сколько и сессий.Что, по сути, имеет тот же эффект, что и то, что вы делаете в настоящее время.
Разработка веб-приложений с отслеживанием состояния для клиентов без учета состояния (несмотря на файлы cookie) и предположительно нестабильных клиентов требует осторожности.Что делать, если пользователь нажимает кнопку «Назад» после выхода из системы?Страница back / prev может содержать действие, которое заставляет сервер использовать соединение БД, которое уже было закрыто страницей выхода до того, как пользователь нажал кнопку «Назад».Или это может быть тайм-аут сервера из-за того, что клиент не ткнул в сервер в течение времени, превышающего значение тайм-аута активности сеанса.
Поэтому, прежде чем разрабатывать «многоуровневое» клиент-серверное приложение, вы должны сесть и составить список всех непредвиденных обстоятельств, с хорошим пониманием мышления / паранойи технологии http.Вы должны заразить себя навязчивыми идеями http, чтобы создавать свои приложения.