Forum Webscript.Ru
Программирование => PHP => Тема начата: sanika от 23 Августа 2006, 14:47:41
-
Возможно тема и оффтопная, но то что я нашел как то не катит. В общем вопрос следующий: на сайте есть форма для входа зарег-ных пользователей. У каждого ник - уникальный. Как узнать что человек вошел, я знаю - для этого в таблице у каждого есть флаг status (может быть 1 или 0). Когда входит флаг ставится в "0" когда выходит по кнопке - ставиться в "0". Но как сделать чтоб когда он выходит через закрытие окна, статус тоже становился в "0"?:confused:
-
читай про сессии.
И была давно тема от (Guard). что-то вроде того что тебе надо
вот
http://forums.webscript.ru/showthread.php?s=&threadid=7786 (http://forums.webscript.ru/showthread.php?s=&threadid=7786)
и еще есть. тока поискать по форуму надо
-
вкратце, так: писать надо не флаг, а timestamp последнего действия юзера на сайте и не проверять наличие нуля или единицы, а смотреть, кто совершал активные действия за последние 1, 2 ... 10 минут и т.п.
-
brainkiller:
вкратце, так: писать надо не флаг, а timestamp последнего действия юзера на сайте и не проверять наличие нуля или единицы, а смотреть, кто совершал активные действия за последние 1, 2 ... 10 минут и т.п.
+1
-
а если он на час отошел, но сайт не закрыл? считать его оффланом?
-
У меня раз в 40 чекунд через AJAX юзер запрашивает скрипт, и я знаю что он на сайте :)
-
У меня раз в 40 чекунд через AJAX юзер запрашивает скрипт, и я знаю что он на сайте
+1
Не могу понять, зачем эти сложности с БД? если есть сессии. Eсли только сессии не отключены.
-
Akvar а как с сеиями?...я отов отказатся если получится сделать.. но я на куках делал
-
AlieN т.е?
-
sanika
function sid(){
global $mysql;
if(isset($this->get[\'logout\'])){
session_start();
session_destroy();
global $user;
return false;
}else{
session_start();
session_register("user");
global $user;
}
if(!isset($user[\'id\'])){
if(isset($this->post[\'login\']) && isset($this->post[\'password\'])){
$mysql->where(\'login="\'.$this->post[\'login\'].\'" AND password="\'.$this->post[\'password\'].\'"\');
$ret=$mysql->read(\'user\');// две мой функции для работы с MySQL в итоге получаю просто массив array(\'id\'=> ... , \'name\'=> ....)
if($ret!==false){
$user=$ret;
}else return false;
}else return false;
}
return true;
}
примерно вот такой код для проверки и внесение в массив $user он также и "сесиия" в котором и будет со страници на страницу по сесии передаватся данные $user(основных даных о клиенте), тоесть когда он во второй раз пройдет этот код то isset($user[\'id\']) будет true.
а вообщето в FAQ на этом форуме очень хорошо все обьяснено. так что сессию я думаю ты запустиш.
Второй вопрос о timeout то при настройке сесии ты указываеш сколько жить сесии, после каждого захода жизнь сесии будет обнулировано.
Как создать список OnLine?
вот код
session_commit();
session_id(\'Cykl\');
session_start(\'aaa\');
session_register(\'aaa\');
global $aaa;
if(!is_array($aaa)) $aaa=array($user[\'id\']=>time());
else $aaa[$user[\'id\']]=time();
if(is_array($aaa))
foreach ($aaa as $key => $val)
if((time()-$val)>10)
unset($aaa[$key]);
print_r($aaa);
за место: >10 ставиш число таймера в секундах, через сколько пользователь будет считатся OFFLine, независит от жизни сессии,
P.S. код взат из класса, поэтому присудствуют $this-> и global ...
-
У меня раз в 40 чекунд через AJAX юзер запрашивает скрипт, и я знаю что он на сайте
Создаеш невидимый frame и в нем таймер на 40 секунд, через 40 секунд пусть перезагрузит frame например фаил refresh.php где вставляеш пару строк
unset($user);
session_start(\'user\');
session_register(\'user\');
if(isset($user[\'id\'])){
session_commit();
session_id(\'Cykl\');
session_start(\'aaa\');
session_register(\'aaa\');
$aaa[$user[\'id\']]=time();
}
и не забываем если кукес выключен (сессия работает или через кукес или через $_GET )то в форме action="refresh.php?SID=".session_id()
-
спасибо..буду завтра разбиратся
-
sanika
смотря какая точность нужна: если можно допустить, что юзер считается оффлайн через N минут бездействия, то да. Если нужно фиксировать факт наличия открытого окна, то AJAX или вариант с фреймом (хотя и то, и другое не даст стопроцентного результата).
Кстати, с сессиями действительно будет лучше.
-
а что такое AJAX?
-
AJAX -- link (http://www.google.ru/search?hl=ru&q=AJAX&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=lang_ru) ;-)
-
спасибо ..довольно интересно