1. Некоторые провайдеры обязывают свои клиентов пользоваться прокси-серверами, а теперь подумайте: что останется в переменной REMOTE_ADDR? Правильно: адрес прокси-сервера! А если на сайт зайдут несколько пользователей одного провайдера, скрипт будет думать что это один и тот же юзер.
2. Некоторые провайдеры, которые предоставляют доступ по кабельным сетям, время от времени меняют IP-адреса пользователей.
К сожалению, когда Тим Бернерс Ли в 91 году разрабатывал протокол HTTP, он хотел сделать его очень быстрым, поэтому удалил всю информацию о состоянии, чем прибавил работы веб-разработчикам. Итак, от слов к делу.. Что нам понадобится для работы: 1. База данных mysql 2. PHP4 Создадим таблицу www_online: CREATE TABLE www_online ( hid int(11) NOT NULL auto_increment, sess_id char(255) NOT NULL default '', last_time char(255) NOT NULL default '', PRIMARY KEY (hid) ) TYPE=MyISAM;
В этой базе мы будем хранить соответственно: Hid – ID, просто так? Sess_id – ID сессии пользователя Last_time – Время последней активности пользователя в секундах с начала эпохи (1970 г.). Теперь код функции:
function show_online_user() { global $database; //Импортируем массив с данными mysql session_start(); //Начинаем сессию session_set_cookie_params("0"); //Задаем время жизни куки $id=session_id(); $time=time(); $past=time()-500; //Переменные(id - id сессии, time-текущее время, past-время, после которого надо удалять сессии). $link=mysql_connect($database[dbserv], $database[dbuser], $database[dbpass]); //Коннектимся к базе данных mysql_select_db($database[dbname]); //Выбираем базу данных mysql_query("DELETE FROM www_online WHERE last_time < '$past'"); //Удаляем старые сессии $result=mysql_query("SELECT last_time FROM www_online WHERE sess_id='$id'"); //Выбираем таблицу $rows=mysql_num_rows($result); //Если в таблице есть sess_id с $id, то равно 1, иначе 0 if ($rows!="0") { mysql_query("UPDATE www_online SET last_time='$time' WHERE sess_id='$id'"); } else { mysql_query("INSERT INTO www_online (last_time, sess_id) VALUES ('$time', '$id')"); } $result = mysql_query("SELECT * FROM www_online"); //Выбираем все сессии $count = mysql_num_rows($result); //Считаем число сессий return "Сейчас на сайте $count человек(а)"; //Возвращаем число юзеров mysql_close($link); //Закрываем коннект с mysql } Вот такая простая функция, решающая большую проблему.
Быстрый переход к содержимому сайта Karman.com.ua:
Новости, советы, углубленные знания, знания для новичков, законодательство, интересные скрипты, фотогалереи, отчеты, статьи о хостинге: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 Часто задаваемые общие вопросы о хостинге, про FTP, PHPMyAdmin и MySQL, CPanel, Предустановленные скрипты, WHM, Cron, .htaccess, SSH, Паролирование директорий,
О доменах, о работе с сайтом, о Раскрутке сайта, об Электронной почте, про Основы web-программирования: 0, 1 Энциклопедия основных терминов хостинга, программного обеспечения, железной стороны хостинга, технологий, электронной почты и доменов: 0, 1, 2, 3, 4, 5, 6 Сайты о хостинге (форумы, хостинг-провайдеры, студии веб-дизайна, домен-регистраторы, инструментарии в помощь вебмастеру): 0, 1, 2