Эта тема на forum.dklab.ru


JET[ALPH]: logout
Здравствуйте. Вначале схема.........
1) Пользователь авторизовался и запустилась сессия, стало видно, что он inline
2) Пользователь полазел по сайту и решил уйти ................. варианты........................
2.1) Как интеллигентный человек пользователь нажал на кнопку logout(запустилась соотв процедура), покинул сайт и стал offline
2.2) Как варвар, пользователь просто закрыл браузер ( а может быть даже нажал конпку reset))), и остался online

Вопрос собственно в следующем - как установить, что пользователь ушел с сайта вариантом 2.2 и обрабоботать соответствующее "событие"?
Решения, которые у меня появились на данный момент, имеют существенные недостатки. Вот собственно эти решения(е):
Решение # 1: Как можно чаще запускать gc процедуру (garbage collection всмысле): вывинчиваем до максимума gc_probability и до минимума session_life_time - как ркзультат получаем, что старые сессии удаляются чуть ли не при каждом запуске скрипта
Недостатки: процедура gc достаточно "дорогая", поэтому сервер в один прекрасный момент может зависнут, если сессий много

Решение # 2 (очень близко к извращению): Javascript (обработка события onclose - запускаем скрипт logout)
Недостатки: решение не изящно, не надежно - JavaScript на клиентском браузере может быть выключен, да и вообще неизвестно к каким последствиям может привести обработка onclose -> скорее всего - к зависанию браузера

Решение # 3: ??????????????????????????????????????????

А дальше все идеи закончились! Но ведь сделали же как-то разработчики phpbb нормальный logout.
Юрий Насретдинов:
JET[ALPH]:
Хранить сессии в БД, и скажем удалять сессии, неактивные 15 минут. Это уже обсуждалось.
JET[ALPH]:
JET[ALPH]:
Хранить сессии в БД, и скажем удалять сессии, неактивные 15 минут. Это уже обсуждалось.

Ясно, что нужно удалять все "старые сессии". В своем первом посте я представил решение с handler_gc (который необходимо запускать достаточно часто). Но это - не самый оптимальный вариант (все свои соображения я изложил в своем первом посте, опять же).


В поиске искал, ничего на данную тему не нашел. (может конечно, я просто не умею пользоваться поиском)) ).
Дмитрий Котеров:
"]Решение # 2 (очень близко к извращению): Javascript (обработка события onclose - запускаем скрипт logout)
Забудьте об этом. Это нерабочий способ.

"]Вопрос собственно в следующем - как установить, что пользователь ушел с сайта
Пользователь никогда не находился на сайте. Поэтому и определить, когда он ушел, нельзя.
Отслеживайте по тайм-ауту.

Я бы порекомендовал Вам вообще не связывать понятие сессии и понятие времени "нахождения" на сайте. Ведите их независимо, и тогда сессии не придется чистить.
Константин Жинько [tIT]:
Когда-нибудь протокол HTTP доработают до ping?pong! ==)
Дмитрий Котеров:
Никогда.
len-kuz:
Можно при авторизации, когда сессию создаешь куку закидывать, потом проверять скажем раз в 5 минут.
Завести функцию, которая будет проверять куки тех кто на сайте, раз в определенное время, если переменная отсутствует, то стереть юзверя из он-лайна и убить сессию.
Константин Жинько [tIT]:
Никогда.
Мне тоже так кажется (-;

Эта тема на forum.dklab.ru