Forum Webscript.Ru

Программирование => PHP => Тема начата: sanika от 23 Августа 2006, 14:47:41

Название: кто именно в онлайне
Отправлено: sanika от 23 Августа 2006, 14:47:41
Возможно тема и оффтопная, но то что я нашел как то не катит. В общем вопрос следующий: на сайте есть форма для входа зарег-ных пользователей. У каждого ник - уникальный. Как узнать что человек вошел, я знаю - для этого в таблице у каждого есть флаг status (может быть 1 или 0). Когда входит флаг ставится в "0" когда выходит по кнопке - ставиться в "0". Но как сделать чтоб когда он выходит через закрытие окна, статус тоже становился в "0"?:confused:
Название: кто именно в онлайне
Отправлено: Sniper от 24 Августа 2006, 19:51:30
читай про сессии.
И была давно тема от (Guard). что-то вроде того что тебе надо
вот
http://forums.webscript.ru/showthread.php?s=&threadid=7786 (http://forums.webscript.ru/showthread.php?s=&threadid=7786)

и еще есть. тока поискать по форуму надо
Название: кто именно в онлайне
Отправлено: brainkiller от 25 Августа 2006, 02:08:58
вкратце, так: писать надо не флаг, а timestamp последнего действия юзера на сайте и не проверять наличие нуля или единицы, а смотреть, кто совершал активные действия за последние 1, 2 ... 10 минут и т.п.
Название: кто именно в онлайне
Отправлено: AlieN от 27 Августа 2006, 13:15:10
Цитировать
brainkiller:
вкратце, так: писать надо не флаг, а timestamp последнего действия юзера на сайте и не проверять наличие нуля или единицы, а смотреть, кто совершал активные действия за последние 1, 2 ... 10 минут и т.п.

+1
Название: кто именно в онлайне
Отправлено: sanika от 28 Августа 2006, 11:54:54
а если он на час отошел, но сайт не закрыл? считать его оффланом?
Название: кто именно в онлайне
Отправлено: AlieN от 28 Августа 2006, 13:37:33
У меня раз в 40 чекунд через AJAX юзер запрашивает скрипт, и я знаю что он на сайте :)
Название: кто именно в онлайне
Отправлено: Akvar от 28 Августа 2006, 15:46:48
Цитировать
У меня раз в 40 чекунд через AJAX юзер запрашивает скрипт, и я знаю что он на сайте
+1

Не могу понять, зачем эти сложности с БД? если есть сессии. Eсли только сессии не отключены.
Название: кто именно в онлайне
Отправлено: sanika от 28 Августа 2006, 16:44:33
Akvar а как с сеиями?...я отов отказатся если получится сделать.. но я на куках делал
Название: кто именно в онлайне
Отправлено: sanika от 28 Августа 2006, 16:45:37
AlieN т.е?
Название: кто именно в онлайне
Отправлено: Altaxar от 28 Августа 2006, 22:34:58
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 ...
Название: кто именно в онлайне
Отправлено: Altaxar от 28 Августа 2006, 22:45:01
Цитировать
У меня раз в 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 от 29 Августа 2006, 00:21:16
спасибо..буду завтра разбиратся
Название: кто именно в онлайне
Отправлено: brainkiller от 29 Августа 2006, 18:37:42
sanika
смотря какая точность нужна: если можно допустить, что юзер считается оффлайн через N минут бездействия, то да. Если нужно фиксировать факт наличия открытого окна, то AJAX или вариант с фреймом (хотя и то, и другое не даст стопроцентного результата).

Кстати, с сессиями действительно будет лучше.
Название: кто именно в онлайне
Отправлено: sanika от 29 Августа 2006, 18:40:08
а что такое AJAX?
Название: кто именно в онлайне
Отправлено: Akvar от 29 Августа 2006, 19:29:35
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) ;-)
Название: кто именно в онлайне
Отправлено: sanika от 29 Августа 2006, 19:40:17
спасибо ..довольно интересно