юзер в он-лайне

tank

Новичок
юзер в он-лайне

Нужно сделать проверку наличия юзеров в оn-line. Из поиска понял:
-создаем табличку, куда кидаем юзеров, зашедших на сайт и время;
-создаем сессию, где смотрим как он ходит по сайту;
-через время Х проверяем сколько времени эта сессия торчит, если больше Х, то удаляем из таблички, если нет то юзер еще с нами.
вопрос:
- Правильно ли я понял механизм?
- Если да, то как скриптом узнать, что прошло время Х, CRON?
 

Demiurg

Guest
Время X пройдет когда кто то захочет узнать про людей в онлайн. Например пользователь нажмет ссылку "кто на сайте"
 

tank

Новичок
Ясно, а нельзя ли выдернуть событие, когда юзер закрыл браузер?
2. Что лучше использовать для отслеживания хождений юзера: куки или сессию?
 

Demiurg

Guest
>Ясно, а нельзя ли выдернуть событие, когда юзер закрыл браузер?
нет

>Что лучше использовать для отслеживания хождений юзера: куки или сессию?
можно писать прям в базу (или в логи) где человек находится и время. Вот и будет тебе путь. С куками что то ничего ясного не вырисовывается.
 

tank

Новичок
Вопрос немного не в тему: при сильном увеличении sql запросов при генерации одной странице, может сильно сказаться на скорости "отдачи" сервером страницы?
 

Фанат

oncle terrible
Команда форума
ни куки, ни сессия зденсь не нужны.

-~{}~ 27.05.04 17:33:

-создаем табличку, куда кидаем юзеров, зашедших на сайт и время;
-когда надо посмотреть, кто на сайте, удаляем старых и выводим число оставшихся.
все.
остальное - лишнее
 

tank

Новичок
попробую с работать с базой.. А если у меня при генерации одной страницы проходит 5-6 запросов к базе, еще парочка не сильно повредит (по времени отдачи)?
 

Фанат

oncle terrible
Команда форума
вредит не количество запросов, а скорость их выполнения.
3 простых запроса (если выводить на каждой странице) в мищзерную таблицу никак не скажутся вообще.
 

tank

Новичок
ок! Всем спасибо, начну делать, не закрывайте пока темку...
 

LOG

Новичок
Уж очень часто спрашивают люди, может это комунить поможет. Код с моего форума.

PHP:
function online($timeout=600)
{
	$mysql->query("DELETE FROM sessions WHERE last_act_time < unix_timestamp()-$timeout");

	if($authorize->member['authorized'] == 1)
	{
		$mysql->query("SELECT last_act_time FROM sessions WHERE user_id=".$authorize->member['id']);
		if($mysql->num_rows() > 0)
		{
			$row = $mysql->fetch_array();
			$time = time() - $row['last_act_time'];
			$mysql->query("UPDATE members SET online=online+$time WHERE id=".$authorize->member['id']);
		}
	}

	if(isset($_COOKIE["uid"]))
	{
		$sesID = $_COOKIE["uid"];
		
		$mysql->query("DELETE FROM sessions WHERE user_ip = '".$_SERVER['REMOTE_ADDR']."' AND id <> '$sesID'");
		$mysql->query("REPLACE sessions VALUES ('$sesID', '".addslashes($authorize->member['name'])."', ".$authorize->member['id'].", '".$_SERVER['REMOTE_ADDR']."', unix_timestamp())");

	}
	else
	{
		$sesID = md5(uniqid(microtime()));
		@setcookie("uid", $sesID, -1, "", $MB['cookie_url']);

		$mysql->query("DELETE FROM sessions WHERE user_ip = '".$_SERVER['REMOTE_ADDR']."'");
		$mysql->query("INSERT sessions VALUES ('$sesID', '".addslashes($authorize->member['login'])."', ".$authorize->member['id'].", '".$_SERVER['REMOTE_ADDR']."', unix_timestamp())");
	}
}
 

MikeV

Guest
А вместо сессии или куки нельзя по ip отслеживать. Потом юзер может открыть страницу и засесть на ней минут на 10, что в таком случае делать?
 

LOG

Новичок
Автор оригинала: MikeV
А вместо сессии или куки нельзя по ip отслеживать.
Представь себе как ты отследишь ip машин которые находятся в какомнить клубе, где у всех машин один и тот же ипишник на инет, при этом с клба могут твой сайт смотреть 10 человек. Получится что у тебя на сайте не 10 а один человек. А через куки можно давать каждому юзеру свой ID, таким образом их отслеживать.

Потом юзер может открыть страницу и засесть на ней минут на 10, что в таком случае делать?

не понял, что именно тя в этом вопросе волнует?
 

MikeV

Guest
Ну человек загрузил страницу и не совершает никаких действий, просто сидит с одной открытой страницой и читает ее. В это время заходит другой человек, открывая страницу он запускает скрипт, который выдает, сколько людей в он-лайне сидит, этот скрипт выщитывает, что время человека, который страницу читает, поидее уже вышло и удаляет его, поэтому, хотя он и на сайте находится, но отображаться будет, что его нет...
 

LOG

Новичок
ну это уже только если какой стрим сделать что-то вроде к в чате chat-php.spb.ru (или какойтамлинк)... так же можно сделать рефреш при помощи JS )))... а вобще какая нах разница, читает он там или нет, если не подает признаков жизни, то значит человека нет в онлайне....

а ну еще одни способ - это сделать время жизни не 10 а 20 или 30 минут
 

Фанат

oncle terrible
Команда форума
LOG
А через куки можно давать каждому юзеру свой ID, таким образом их отслеживать.
если клиент куки возвращает.
хотя, поскольку цифра все равно приблизительная, то считавть можно как угодно.
но в этом смысле верно и обратное - ip ничем не хуже кук.
а то, что тебя смотрят 10 человек из одного клуба - это ты себе льстишь :)
и то и то достаточно надежно и достаточно неточно.
с куками больше мороки.

в коде твоем много лишнего.
сессии, авторизация.
это как Димина статья про постраничку. вь основном про поиск и внизу - чуть-чуть - про постраничный вывод :)
10 а 20 или 30 минут
это будет уже явное вранье.
в этом сслучае можно не заморачиваться со счетчиком, а просто писать от балды побольше
с 600 секундами ты, кстати, ОЧЕНЬ себе льстишь.
раза в три, я думаю, завышаешь. хотя зависит от общей посещаемости.

MikeV
а тебе внимательно читать http://phpfaq.ru/na_tanke
там есть прямой ответ на твой вопрос.
 

LOG

Новичок
1. Я считаю что лучше куками, а не ипами... но пофиг.... )))

2. в этой функции есть строки позволяющие избежать дублирование юзеров, которые заходят через разные браузеры (всякие маньяки есть :) )

3. 10 минут - вполне объективная цифра посещаемости :)
 

Фанат

oncle terrible
Команда форума
в этой функции есть строки позволяющие избежать дублирование юзеров, которые заходят через разные браузеры
эээ..
это завязано на авторизацию?
я же говорю - лишнее.
весьма.
10 минут - вполне объективная цифра посещаемости
не поделишься источником своей объективности?
 
Сверху