2016-09-25 3 views
0

Я считаю, два сценария:Как правильно вывести веб-приложение?

  1. пользователь нажимает на «выйти» гиперссылки, которые называют «logout.php» (это легко)
  2. Пользователь закрывает вкладку (окно) или закрывает браузер.

И здесь я не знаю, что мне делать. Существует событие: window.onunload, который может быть использован, возможно, как это (не проверено):

<script> 
    var logout_php = function() { 
     var xhttp = new XMLHttpRequest(); 
     xhttp.open("GET", "logout.php", true); 
     xhttp.send(); 
    } 

    window.onunload = logout_php ; 
</script> 

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

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

Уверен, это должна быть общая проблема, но я не могу найти подходящий ответ.

thanx

+0

Обычно веб-приложения просто полагаются на истечение сеанса для этого. – bcmcfc

ответ

0

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

+0

Я использую сеансы, но я думал, что я должен уничтожить их вручную. Я уничтожаю сеанс при выходе из системы, но я не уверен, что если идентификатор сеанса, хранящийся на локальном компьютере, будет удален сразу после закрытия всех вкладок, подключенных к серверу – lyborko

+0

, закрытие всего окна уничтожит сеанс. Если есть несколько вкладок, и только некоторые из них закрыты, то это не разрушает сеанс автоматически. –

0

Вы можете попробовать ajax keep_live, который вызывает ваш сервер каждые 1 минуту или около того, обновляя переменную last_checkin в базе данных или так далее. Если вкладка закрыта, эта функция больше не вызывается.

В начале каждого запроса проверьте, действительно ли last_checkin в последнюю минуту (+ некоторое время для подключения). Если нет, перенаправляйтесь на выход (и уничтожайте сеанс, если он существует).

Это похоже на тайм-аут сеанса. Вы можете сделать это каждые 5 секунд или около того. Если кто-то закрывает свою вкладку, а затем (по какой-то странной причине) кто-то другой сидит на ПК и открывает ранее закрытые вкладки. Скорее всего, время x прошло с момента последней регистрации, и теперь пользователь вышел из системы.

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

+0

Да, я тоже это рассматривал. У меня есть запрос AJAX, который постоянно срабатывает на сервере, поэтому он знает, что пользователь все еще находится в сети. Но это не «идеальное» решение, потому что, как вы уже сказали, вы можете повторно войти на сайт за короткий промежуток времени. Если @ Киншук Лахири прав, возможно, моя боль исцелена. – lyborko

Смежные вопросы