Автор Тема: Определить, что пользователь покинул сайт  (Прочитано 6934 раз)

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

Оффлайн SlavaK

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как с помощью PHP можно определить, что пользователь покинул страницу сайта (или сайт вообще)?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://

Оффлайн ripper

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.webz.ru
Определить, что пользователь покинул сайт
« Ответ #2 : 10 Января 2004, 04:23:34 »
Делаешь очень просто: когда пользователь ходит по сайту открываешь сессию и время. Записываешь все это дело в БД или в файл. Например если ты с MySQL сделал. Пока пользователь ходит по сайту обновляешь время по ключу - индефикатор сессии. Когда время отстает минут на 30 можно судить что пользователь ушел - в общем таким способом можно сделать скрипт "кто был на сайте".
: WebZ - программирование

Оффлайн SlavaK

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Определить, что пользователь покинул сайт
« Ответ #3 : 10 Января 2004, 11:57:56 »
На счет регистрации времени посещения страниц - это я и сам додумался. Только я решил обойтись без сессий, а просто обновлять время посещения страницы в одной из таблиц MySQL. Мне это нужно для чата. Чтобы удалять неактивных из списка присутствующий.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Определить, что пользователь покинул сайт
« Ответ #4 : 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

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Определить, что пользователь покинул сайт
« Ответ #5 : 10 Января 2004, 21:20:20 »
Цитировать
RomikChef:
mysql_query("REPLACE session VALUES (\'".getenv("REMOTE_ADDR")."\',unix_timestamp())");

Я не совсем понял.
Этот запрос что, заменяет ВСЕ записи таблицы session на значение текущего IP-адреса посетителя и на текущий таймстемп?
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн SlavaK

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Определить, что пользователь покинул сайт
« Ответ #6 : 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");}

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Определить, что пользователь покинул сайт
« Ответ #7 : 10 Января 2004, 22:24:20 »
FreeSpace , нет :-)
Ссылку на доку дать? ;-)

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Определить, что пользователь покинул сайт
« Ответ #8 : 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

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Определить, что пользователь покинул сайт
« Ответ #9 : 11 Января 2004, 19:45:22 »
FreeSpace
Спасибо, буду иметь в виду.

 

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