|
|
|
| Как с помощью имеющегося значения константы SID проверить существование сессии? Подскажите функцию. | |
|
|
|
|
|
|
|
для: Anwor
(12.05.2006 в 20:39)
| | Сравнить имеющееся значение со значением, которое даёт функция session_id(). | |
|
|
|
|
|
|
|
для: Саня
(12.05.2006 в 22:57)
| | Ан нет, тут хитрость не в этом. Идея в следующем: надо сделать скрипт, запускаемый cron'ом каждую минуту, который бы брал из базы значение SID и проверял, существует ли сессия с этим идентификатором. Если нет - то удалять эту запись нафиг из базы.
В общем, в более глобальном смысле это должен быть механизм засекания, когда юзер вышел из системы (вход-то, понятное дело, написать в 2 счета). Ломал голову над этой задачей - пришел к выводу, что единственно возможный вариант - этот.
Может, у кого-то есть более гибкие наработки по этой теме?
Если слишком сумбурно, то разложу по пунктам:
1. Юзер заходит - на него заводится новая запись в таблиц о сессиях. Туда же кидается время входа и его SID.
2. Юзер выходит - предположим, некорректно, прямо по рубильнику... вариант с явовским onUnload отпадает.
3. Отдельный скрипт, работающий в фоновом режиме, проверяет по базе (а именно - по существующим записям SID) существование соответствующих сессий, и если какой-то из них уже НЕ существует, в таблицу встает дата выхода, а запись SID удаляется. Т.о. получаем, что существуют в данный момент только те сессии, SIDы которых есть в таблице. По ним и ведется проверка. | |
|
|
|
|
|
|
|
для: Anwor
(12.05.2006 в 23:09)
| | Я бы сделал так:
В базе добавил поле - время последнего изменения. Написал юзер в чате, обновил страницу... - поле приняло значение time(). А затем кроном удалять все записи, время изменения которых больше чем time()+3*60. | |
|
|
|
|
|
|
|
для: Саня
(12.05.2006 в 23:15)
| | Что-то не очень понятно... Вы имеете в виду, что лучше здесь использовать не сессион-лог, а время обновления страницы?
Дело в том, что здесь имеет место система с точным аудитом, по всем данным о юзере должны вестись подробные логи, хранящиеся в базе, поэтому не знаю, удастся ли реализовать подобное без сессий... Кроме того, сессии есть там уже и сами по себе, можно сказать, вся система защиты на них выстроена, я думал поэтому их и использовать. | |
|
|
|
|
|
|
|
для: Anwor
(12.05.2006 в 23:09)
| | Врядли такой подход Вам поможет.
Если пользователь вышел честно (явно нажав на ссылку завершения сеанса) Вы и без того сразу сможете подчистить за ним контекст серверной стороны.
Если пользователь вышел, закрыв окно, выключив компьютер, оборвав кабель сетевой карты и пр. никакие сессии Вам не помогут, поскольку они устаревают (и удаляются) спустя время существенно превышающее одну минуту. Иначе бы пользователь терял сессии при нормальной работе. | |
|
|
|
|
|
|
|
для: Trianon
(13.05.2006 в 00:46)
| | Нет, все-таки превалирующим остается вариант выхода по крестику на окне explorer'a (или др. браузера), т.е. допустим вариант onUnload.... Но как же в данной ситуации избежать тотального краха программы, предусмотрев другие, некорректные варианты выхода? Может, кто-то поделится идеей?.. | |
|
|
|
|
|
|
|
для: Anwor
(16.05.2006 в 20:14)
| | Для чата, например, нужно поставить время жизни сессии 3 минуты. Если прошло три минуты с момента последнего обращения пользователя, то считать сессию недействительной и удалить её, а в канал чата вывести, что пользователь вышел. | |
|
|
|
|
|
|
|
для: Саня
(16.05.2006 в 20:29)
| | Об этом я думал. Только как осуществить передачу информации о "смерти" сессии - скрипту, который занесет соответствующие данные в БД? В принципе, как я понял тут можно вообще обойтись без SID'а, я прав? | |
|
|
|
|
|
|
|
для: Anwor
(16.05.2006 в 23:01)
| | Достаточно точный момент выхода определить затруднительно пожалуй.
А что если юзер уставился в экран и смотрит полчаса на него ничего не делая?
Самым верным способом будет AJAX можно конечно и на выключенный яваскрипт наскочить, и гневную ноту схлопатать за постоянный трафик от юзера, но зато гарантия выхода 100%.
В каждой странице пишешь ajax-овский код, который отправляет запрос на твой хост каждую минуту, а хост убеждается, что юзер не спит. А на сервере происходит проверка, если больше минуты нет запроса от скрипта, то пиши в БД о выходе юзера. | |
|
|
|
|
|
|
|
для: XPraptor
(17.05.2006 в 03:02)
| | Честно говоря, довольно смутно представляю себе машину Аякса... Чтобы коды на нем работали, нужно ли, чтобы соответствующий движок стоял на сервере? Потому что если нужен, то здесь пролет - в дескриптинге сервиса есть только крон и еще пара никому не нужных утилиток..
А насчет точности определения выхода - можно считать исключением некорректные сбросы, а сама точность округляется минут до 3-х. Это возможно? | |
|
|
|
|
|
|
|
для: Anwor
(17.05.2006 в 14:45)
| | Люди, горю! ((( | |
|
|
|