Сеанс HTTP Java:Why не уничтожается, когда вкладка или браузер закрываются?

В этой статье здесь [1] говорится, что дисплеи Retina (дисплеи с высоким разрешением) будут пытаться отображать в 2 раза больше пикселей в той же области. Площадь, которая также измеряется в пикселях, пикселях, которые вы фактически объявляете в CSS.

Так вот откуда пришло мое замешательство. Решением было создать миниатюры в два раза больше отображаемого размера.

16
задан Flueras Bogdan 1 April 2009 в 15:59
поделиться

6 ответов

Как сервер знал бы, когда браузер закрывается или закрытая вкладка? В той точке браузер ничего не отправляет на сервер.

Это - фундаментальная часть HTTP - это - протокол запроса/ответа, не "постоянно открытый разговор", где можно сказать, оставляет ли одна сторона разговор. Думайте о нем как о ряде телеграмм, а не телефонного вызова - и Вы не можете сказать при получении последней телеграммы, Вы собираетесь добраться.

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

40
ответ дан 30 November 2019 в 15:47
поделиться

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

Вы могли попытаться играть, ajax обращаются к событию JavaScript document.onunload https://developer.mozilla.org/en/DOM/window.onunload, но необходимо будет быть уверены, что пользователь не все еще на сайте, когда Вы делаете это.

1
ответ дан 30 November 2019 в 15:47
поделиться

При необходимости в сессии, которая будет уничтожена, когда окно браузера,/tab, закрывается, Вы могли бы присоединить обработчик JavaScript к onunload событию, которое выполняет своего рода вызов Ajax к ресурсу, что вызов уничтожает сессию.

Обратите внимание, что onunload событие не всегда стреляет так, это не полностью защищено. Один испытанный путь мог бы состоять в том, чтобы использовать систему "heartbeat".

1
ответ дан 30 November 2019 в 15:47
поделиться

Объекты сессии живут в сервере и управляются сервером. Только сервер может создать или уничтожить сессии. Таким образом, если клиент закрывается жизни сессии, пока это не истекает. Клиент может только намекнуть серверу, что он может уничтожить некоторую сессию. Этот запрос должен быть явным так или иначе. Следовательно при закрытии окна браузера нет никакого неявного запроса к серверу, сообщающему, что он должен уничтожить данную сессию.

1
ответ дан 30 November 2019 в 15:47
поделиться

Как Eric, упомянутый, разгрузить событие на браузере может вызвать функцию JavaScript, которая в свою очередь может получить доступ к URL через сервлет, который регистрирует Вас. Вы не должны ожидать фактического ответа от сервлета.

Веб-браузер взаимодействует с сервером через http протокол, и это является не сохраняющим состояние.

0
ответ дан 30 November 2019 в 15:47
поделиться

NOTE: As jwenting commented below, this it's not 100% safe at all. If the the onunload event does not get triggered by a closing event of the browser tab or window, then this would fail.

I had the same problem, and solve it using an intrusive JavaScript event:

window.onunload

Let me briefly explain, lets say you have a JavaScript function that post, using jQuery, the current Session ID to that Servlet to invalidate it, like this:

function safeexit(){
   $.post("/SessionKillServlet", { SID = <%=session.getId()%> }, function(data){});
}

To call that function, you just need to bind it like these:

window.onunload =  safeexit;  //without the ()

Now, safeexit method will be called when the TAB or BROWSER WINDOW gets closed (or in a redirection).

6
ответ дан 30 November 2019 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: