Способы продления сессии

Ashotovich

Новичок
Способы продления сессии

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

Единственный виденный мною вариант таков: после успешной авторизации открывается маленькое popup-окошко, которое с определенным интервалом постоянно проверяет адрес в окне работы с базой (если таковое еще не закрыто) и отсылает на сервер сообщение о том, что пользователь все еще работает с базой. Как только окно работы с базой закрывается, или пользователь переходит на другой сервер, маленькое окошко отсылает серверу с базой команду на запуск скрипта, убивающего сессию.

Вопрос вот в чем: есть ли другие способы реализации подобной задачи? В этом уж слишком много "узких мест".

Заранее спасибо.

С уважением, Ashotovich.
 

Alkinoy

Guest
фигня. А если пользователь прибъет попап окошко? я, например, их органически не перевариваю и стараюсь подавить.
 

tony2001

TeaM PHPClub
>фигня. А если пользователь прибъет попап окошко?
>я, например, их органически не перевариваю и стараюсь подавить.
у меня они вообще не открываются.
Опера их давит успешно.

Ashotovich
может, стоит не изобретать велосипед и использовать сессии в базе, которые будут чиститься по крону?
или хочется именно изобрести что-то ?
 

Ashotovich

Новичок
tony2001,
ничего я изобретать не хочу. Я просто хочу узнать, как мне реализовать отслеживание закрытия клиента. Если есть нормальные способы - поделитесь, плиз. Ну или наводящую мысль подкиньте. ;)
 

tony2001

TeaM PHPClub
нет, нормальных способов я не вижу.
единственный - таймаут сессии.
 

Ashotovich

Новичок
Угу. А продлевать - при помощи msession_timeout? Дык по ней манов еще нет... Как ей пользоваться-то?
 

Falc

Новичок
Можно сделать невидимый iframe который будет постояно рефрешиться с заданным интервалом. Если обновления не произошло значит пользователь ушел на другую страницу и сесию можно убивать.
Но такой вариант сильно увеличивает расход трафика, зато для интранета являеться хорошим решением.
 

tony2001

TeaM PHPClub
>Угу. А продлевать - при помощи msession_timeout?
>Дык по ней манов еще нет... Как ей пользоваться-то?
ну а причем тут это? =)

тебе её растянуть надо как резину или узнать когда юзер вышел?
 

Ashotovich

Новичок
А, ну да. Лажанулся. ;) А для установки таймаута надо значение session.cookie_lifetime выставить в php.ini, я правильно понимаю?
 

Alkinoy

Guest
положил в сессию текущее время, потом при каждом обращении проверяешь - если не истекло, обновил, если истекло время - убил сессию и юзверя на логин
 

Ashotovich

Новичок
Вариант с "положил в сессию текущее время" - в моем случае весьма недурен, ибо у меня к каждой странице и скрипту в начале прикручивается при помощи include спецыяльный скрипт, проверяющий всякие данные из сессии, наличие в массиве $_POST недопустимых символов, в котором, собственно, session_start() и прописано. Так что после session_start() вписать проверку предыдущего времени и замену его на новое в случае непревышения таймаута, или же отправки на exit.php - в случае превышения, - вполне легко.

Есть ли что-нибудь против такого решения?
 

Фанат

oncle terrible
Команда форума
Это недурной вариант.
правда, с определением, онлайн юзер, или оффлайн, не имеет ничего общего
 

tony2001

TeaM PHPClub
>положил в сессию текущее время, потом при каждом обращении проверяешь
> - если не истекло, обновил, если истекло время - убил сессию и юзверя на логин

я не совсем понимаю каким образом эмуляция УЖЕ встроенного механизма сессий поможет "найти наиболее оптимальный способ определения статуса пользователя".
 

Ashotovich

Новичок
Это да. Но наиболее нужную функцию - убиение сессии в случае превышения таймауто он выполняет. Другое дело, что при закрытии браузера файл сессии так и останется жить на сервере... Кому он, конечно мешает, но для порядка его бы убить надо... Подскажите, как это делается (в смысле где прописать на сервера время жизни файлов сессии)?
 

Ashotovich

Новичок
У меня session.gc_maxlifetime = 1440, то есть 24 минуты. При команде session_start() это время начинает отсчитываться заново - я правильно понимаю?

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

Falc

Новичок
2 Ashotovich
А способ предложеный мной тебе не подходит?
 

Falc

Новичок
>> У меня session.gc_maxlifetime = 1440, то есть 24 минуты. При команде session_start() это время начинает отсчитываться заново - я правильно понимаю?

Да
 

Фанат

oncle terrible
Команда форума
Falc, поскольку это единственный работающий способ, то подходит :)
Тем более, что трафика там особо ного не будет. Ну, килобайт заголовков, скажем, в минуту. На контенте больше же съест!
 
Сверху