Автор Тема: кто именно в онлайне  (Прочитано 14948 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sanika

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 141
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.sanika.interdalnoboy.com
кто именно в онлайне
« : 23 Августа 2006, 14:47:41 »
Возможно тема и оффтопная, но то что я нашел как то не катит. В общем вопрос следующий: на сайте есть форма для входа зарег-ных пользователей. У каждого ник - уникальный. Как узнать что человек вошел, я знаю - для этого в таблице у каждого есть флаг status (может быть 1 или 0). Когда входит флаг ставится в "0" когда выходит по кнопке - ставиться в "0". Но как сделать чтоб когда он выходит через закрытие окна, статус тоже становился в "0"?:confused:

Оффлайн Sniper

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 86
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.40000.ru
кто именно в онлайне
« Ответ #1 : 24 Августа 2006, 19:51:30 »
читай про сессии.
И была давно тема от (Guard). что-то вроде того что тебе надо
вот
http://forums.webscript.ru/showthread.php?s=&threadid=7786

и еще есть. тока поискать по форуму надо
Пока играет музыка - танцуй...

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
кто именно в онлайне
« Ответ #2 : 25 Августа 2006, 02:08:58 »
вкратце, так: писать надо не флаг, а timestamp последнего действия юзера на сайте и не проверять наличие нуля или единицы, а смотреть, кто совершал активные действия за последние 1, 2 ... 10 минут и т.п.

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
кто именно в онлайне
« Ответ #3 : 27 Августа 2006, 13:15:10 »
Цитировать
brainkiller:
вкратце, так: писать надо не флаг, а timestamp последнего действия юзера на сайте и не проверять наличие нуля или единицы, а смотреть, кто совершал активные действия за последние 1, 2 ... 10 минут и т.п.

+1
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн sanika

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 141
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.sanika.interdalnoboy.com
кто именно в онлайне
« Ответ #4 : 28 Августа 2006, 11:54:54 »
а если он на час отошел, но сайт не закрыл? считать его оффланом?

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
кто именно в онлайне
« Ответ #5 : 28 Августа 2006, 13:37:33 »
У меня раз в 40 чекунд через AJAX юзер запрашивает скрипт, и я знаю что он на сайте :)
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Akvar

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 34
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
кто именно в онлайне
« Ответ #6 : 28 Августа 2006, 15:46:48 »
Цитировать
У меня раз в 40 чекунд через AJAX юзер запрашивает скрипт, и я знаю что он на сайте
+1

Не могу понять, зачем эти сложности с БД? если есть сессии. Eсли только сессии не отключены.
php-программист

Оффлайн sanika

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 141
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.sanika.interdalnoboy.com
кто именно в онлайне
« Ответ #7 : 28 Августа 2006, 16:44:33 »
Akvar а как с сеиями?...я отов отказатся если получится сделать.. но я на куках делал

Оффлайн sanika

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 141
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.sanika.interdalnoboy.com
кто именно в онлайне
« Ответ #8 : 28 Августа 2006, 16:45:37 »
AlieN т.е?

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
кто именно в онлайне
« Ответ #9 : 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 ...
« Последнее редактирование: 28 Августа 2006, 23:00:17 от Altaxar »
Не все является тем чем кажется.

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
кто именно в онлайне
« Ответ #10 : 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()
« Последнее редактирование: 28 Августа 2006, 22:52:36 от Altaxar »
Не все является тем чем кажется.

Оффлайн sanika

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 141
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.sanika.interdalnoboy.com
кто именно в онлайне
« Ответ #11 : 29 Августа 2006, 00:21:16 »
спасибо..буду завтра разбиратся

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
кто именно в онлайне
« Ответ #12 : 29 Августа 2006, 18:37:42 »
sanika
смотря какая точность нужна: если можно допустить, что юзер считается оффлайн через N минут бездействия, то да. Если нужно фиксировать факт наличия открытого окна, то AJAX или вариант с фреймом (хотя и то, и другое не даст стопроцентного результата).

Кстати, с сессиями действительно будет лучше.

Оффлайн sanika

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 141
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.sanika.interdalnoboy.com
кто именно в онлайне
« Ответ #13 : 29 Августа 2006, 18:40:08 »
а что такое AJAX?

Оффлайн Akvar

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 34
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
кто именно в онлайне
« Ответ #14 : 29 Августа 2006, 19:29:35 »
php-программист

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28