Выход из чата пользователя -> использование fileatime()

korvin0

моська
Выход из чата пользователя -> использование fileatime()

Я хочу в чате засекать выход пользователя при помощи дополнительного специального файла, который создается, когда пользователь входит в чат и удаляется, когда пользователь выходит. Каждые N секунд этот файл открывается скриптом (но не изменяется):
PHP:
$f=fopen("users/".$_SESSION['person'],"w");
 fclose($f);
Как только мы видим, что файл не обновлялся, например, 2 или 3 минуты, мы считаем пользователя вышедшим из чата.
Вообщем, обычная для большинства чатов схема. А вопрос у меня такой: какой функцией php мне можно получить время последнего доступа к файлу. В мануале написано - fileatime(), но под виндой date("G:s:i",fileatime("users/".$_SESSION['person'])) выдает 0:00:00.
Подскажите, может это только под Win32 глюки, или я вообще не то или не так использую.
 

Winer

Мимо проходил
Some Unix filesystems can be mounted with atime updates disabled to increase the performance of such applications; USENET news spools are a common example. On such filesystems this function will be useless(phpman)
и fat входит в их число

-~{}~ 23.04.04 19:42:

ntfs кстати не входит :)
 

SiMM

Новичок
Re: Выход из чата пользователя -> использование fileatime()

Автор оригинала: korvin0
А вопрос у меня такой: какой функцией php мне можно получить время последнего доступа к файлу. В мануале написано - fileatime(), но под виндой date("G:s:i",fileatime("users/".$_SESSION['person'])) выдает 0:00:00.
Подскажите, может это только под Win32 глюки, или я вообще не то или не так использую.
Скорее всего, такие глюки имеют место быть под Win, если у тебя файловая система FAT, а не NTFS. А вообще, при работе с сессиями, насколько я понимаю, "устарвешие" сессии должны удаляться автоматически и подобных проблем возникать не должно.
 

korvin0

моська
- да уж fat sucks в этом отношении оказался.
SiMM
Где ставить время жизни сессии?
 

Winer

Мимо проходил
void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure]]] )

и php.ini
session.cookie_lifetime( не помню точно, примерно так)
 

SiMM

Новичок
Автор оригинала: korvin0
Где ставить время жизни сессии?
Поскольку сессии - прерогатива PHP, то в php.ini наверно :) Посмотри для начала [f]sessions[/f], в частности, почитай о параметре session.cookie_lifetime - но, насколько я понимаю, это актуально только при использовании сессий при помощи кук. Честно говоря, мне самому хотелось бы узнать, что происходит с сессиями, если они не используют кук (например, что произойдёт, если я по оплошности дам где-нибудь ссылку с seession_id админки - будет ли авторизованный по сессии пользователь восприниматься как админ?).
 

Winer

Мимо проходил
SiMM
я думаю за это отвечает garbage collection
session.gc_probability = 1
session.gc_dividend = 100
session.gc_maxlifetime = 1440
:)

-~{}~ 23.04.04 20:08:

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
; WARNING: Your filesystem must store access times. Windows FAT does
; not. So, see session_set_save_handler() and write your own
; session handler with a different mechanism for cleaning up sessions.
session.gc_maxlifetime = 1440
если быть точнее
 

korvin0

моська
А если для передачи идентификатора используются не куки, а добавление идентификатора к формам и url? Сессия будет жить вечно?
SiMM
Будет, а почему нет? Ты ж ссылку передашь get'ом - скрипт пойдет сессийные параметры читать.
 

Winer

Мимо проходил
korvin0
нет
; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
правда непонятно, именно сессия буит почищена или только данны е в ней
 

korvin0

моська
Сори, вопрос устарел. Тогда как поставить session.gc_maxlifetime если нет доступа к php.ini?
 

Winer

Мимо проходил
т.е. еси session.gc_maxlifetime = 1440 то через стока секунд сессия буит почищена

-~{}~ 23.04.04 20:22:

никак ИМХО, тока свой session_handler делать
 

korvin0

моська
"Windows FAT does not. " меня больше всего смущает. Мне ж нужно тестить под виндой, а выкладывать на хостинг под unix'ом. Если б винда "store access times", то я б и fileatime()'ом обошелся (там же по этой же самой причине не пашет функция).
 

Dmitry22

Guest
korvin0
ini_set(session.gc_maxlifetime, '...'); если хостер разрешил.
 

korvin0

моська
Winer
Да, или session_handler делать, или filemtime юзать. Только тады придется в файл еще писать что-нить все время
 

Winer

Мимо проходил
совсем про ini_set забыл, вот что значит конец рабочего дня : ))
 

korvin0

моська
А можно тогда в session_handler указать свой lifetime сессии? И если да, то можно хотя бы мааленький пример

-~{}~ 25.04.04 19:34:

Вот же ж надо ж!
Тестю под unix'ом: и fileatime() и filemtime() меняются только при изменении содержания файла! В чем дело? Помогите, плизз!
 
Сверху