Как синхронизировать с сервером и очистить сессию перед тем, как пользователь покинет страницу? - PullRequest
0 голосов
/ 13 октября 2011

Есть ли способ определить, когда пользователь покидает страницу, независимо от того, закрыл ли он браузер, ввел ли новый адрес в адресную строку, щелкнул ссылку, которая перенаправляет на другой домен и т. Д.?

Основной целью этого было бы выполнение некоторых действий, таких как:

  • синхронизация с сервером некоторых данных, которые находятся на стороне клиента
  • очистка сеанса сервера

Я пытался с событиями unload и beforeunload окна и читал другие вопросы, такие как: Лучший способ определить, когда пользователь покидает веб-страницу? // Есть ли способчтобы узнать, что пользователь покидает страницу с asp.net?, но я не нашел ответа, которого ожидал.

Вот упрощенный фрагмент js, чтобы понять, что я пытался:

window.onunload = function(){
    if (theConditionThatINeed){
        doThings();
        SyncWithServerAndAbandonSession(url, localObjects);
    }
    else {
        doNothing();
    }
}

Я не хочу отображать какие-либо подтверждения до того, как пользователь уйдет, поэтому я думаю, что onbeforeunload мне здесь не поможет.

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

Основной браузер, который я поддерживаю, это IE> = 7

1 Ответ

1 голос
/ 13 октября 2011

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

Вы можете отправлять себе сообщения поддержки активности ajax через javascript, если пользователь что-нибудь сделает на вашей странице. Опять же, очень ненадежный, расточительный и хакерский. Автосинхронизация после короткого времени ожидания.

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

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

...