Forum Webscript.Ru

Программирование => PHP => Тема начата: SlavaK от 09 Января 2004, 13:14:27

Название: Определить, что пользователь покинул сайт
Отправлено: SlavaK от 09 Января 2004, 13:14:27
Как с помощью PHP можно определить, что пользователь покинул страницу сайта (или сайт вообще)?
Название: Определить, что пользователь покинул сайт
Отправлено: Меняздесьдавнонет от 09 Января 2004, 13:21:41
никак.
http://faq.phpclub.net/na_tanke
Название: Определить, что пользователь покинул сайт
Отправлено: ripper от 10 Января 2004, 04:23:34
Делаешь очень просто: когда пользователь ходит по сайту открываешь сессию и время. Записываешь все это дело в БД или в файл. Например если ты с MySQL сделал. Пока пользователь ходит по сайту обновляешь время по ключу - индефикатор сессии. Когда время отстает минут на 30 можно судить что пользователь ушел - в общем таким способом можно сделать скрипт "кто был на сайте".
Название: Определить, что пользователь покинул сайт
Отправлено: SlavaK от 10 Января 2004, 11:57:56
На счет регистрации времени посещения страниц - это я и сам додумался. Только я решил обойтись без сессий, а просто обновлять время посещения страницы в одной из таблиц MySQL. Мне это нужно для чата. Чтобы удалять неактивных из списка присутствующий.
Название: Определить, что пользователь покинул сайт
Отправлено: Меняздесьдавнонет от 10 Января 2004, 15:54:24
SlavaK, молодец.
делать показ "кто сейчас онлайн" с помощью сессий - это стрелять из пушек по воробьям.
Так имеет смысл только если сессии уже используются, а сессии имеет смысл использовать на весьма ограниченном количестве сайтов и весьма и весьма подумав - сколько они вреда принесут ,а сколько - пользы.
Ну, а в чате-то и вовсе просто. странно, что ты сам не догадался выкидывать всех, кто не обновил страницу за время, которое у тебя рефрешится чат, плюс небольшой таймаут.
А вот тебе и функция, кстати, я тут на соседнем форуме написал.
Правда, тут в качестве идентификатора юзера используется его IP - только заменить его на имя в чате - и всею

function online($timeout=180) {
  mysql_query("DELETE FROM session WHERE time < unix_timestamp()-$timeout");
  mysql_query("REPLACE session VALUES (\'".getenv("REMOTE_ADDR")."\',unix_timestamp())");
  $result = mysql_query("SELECT COUNT(*) FROM session");
  $count = mysql_fetch_array($result);
  return $count[0];
}
Наверняка у тебя получилось сложнее

ripper, таймаут в 30 минут может поставить либо полный, клинический идиот, либо патологический лжец.
Ибо в 10 раз превысить реальное среднее время нахождения на странице, и даже умудриться перекрыть стандартное время жизни сессии, которое рассчитано на то, что человек гарантироваенно ушел с сайта - это надо быть фантастически жадным.
Название: Определить, что пользователь покинул сайт
Отправлено: FreeSpace от 10 Января 2004, 21:20:20
Цитировать
RomikChef:
mysql_query("REPLACE session VALUES (\'".getenv("REMOTE_ADDR")."\',unix_timestamp())");

Я не совсем понял.
Этот запрос что, заменяет ВСЕ записи таблицы session на значение текущего IP-адреса посетителя и на текущий таймстемп?
Название: Определить, что пользователь покинул сайт
Отправлено: SlavaK от 10 Января 2004, 22:06:08
Спасибо за заготовку, RomikChef. У меня уже есть что-то подобное.
У меня при детектирповании IP-адресов мало адресов определяются реальных. Чаще всего определяются типа : 192.168.0.x
Для детектирования IP пользовался найденной на форуме заготовкой :
if (getenv("HTTP_CLIENT_IP")){$ip = getenv("HTTP_CLIENT_IP");}
elseif (getenv("HTTP_X_FORWARDED_FOR")){$ip = getenv("HTTP_X_FORWARDED_FOR");}
else {$ip = getenv("REMOTE_ADDR");}
Название: Определить, что пользователь покинул сайт
Отправлено: Меняздесьдавнонет от 10 Января 2004, 22:24:20
FreeSpace , нет :-)
Ссылку на доку дать? ;-)
Название: Определить, что пользователь покинул сайт
Отправлено: FreeSpace от 11 Января 2004, 14:45:30
RomikChef
Всё, уже разобрался, спасибо :)
Пока что продолжаю осваивать мускуль и с REPLACE сталкивался всего один раз, и то поверхностно.
Зато почерпнул для себя нечто полезное, что раньше до конца не понимал:
Цитировать
Note that unless the table has a UNIQUE index or PRIMARY KEY, using a REPLACE command makes no sense. It becomes equivalent to INSERT, because there is no index to be used to determine whether a new row duplicates another.


SlavaK
Единственный достоверный IP-адрес, который ты можешь использовать у себя в скриптах - это REMOTE_ADDR.
Всё остальное можно элементарно подделать. Представь себе, что клиент, соединится с твоим сервером напрямую и отправит ему заголовок HTTP_X_FORWARDED_FOR со значением случайно сгенерированного IP-адреса. В таком случае сервер никак не отличит такого клиента от прокси-сервера и запомнит именно тот поддельный адрес, который сгенерирует клиент.
Надеюсь я достаточно внятно объяснил.
Название: Определить, что пользователь покинул сайт
Отправлено: SlavaK от 11 Января 2004, 19:45:22
FreeSpace
Спасибо, буду иметь в виду.