Гостевая
Форум
Разделы
Главная страница
Js скрипты
Php скрипты
Html шаблоны
Книги по Web дизайну
Статьи


Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Сколько человек на сайте?

Источник: realcoding.net

Почему этот плох метод определения пользователей по IP? Давайте подумаем:

  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
}

Вот такая простая функция, решающая большую проблему.



Похожие статьи:
- Метатэги
- Использование шаблонов дизайна в ASP.NET
- Прячем счётчики
- Хитрости табличного дизайна. (формируем рамку таблицы)
- Что такое дорвеи? Банят ли за них?
- Использование HTML-таблиц для вывода диаграмм
- И снова отказываемся от модуля CGI?
- Подробно о Robots.txt
- Удаление строки из файла
- Про тэги и метатэги
- Зачем нам нужен SSI
- Слежение за контентом на динамических сайтах
- Регулярные выражения


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |
[0.001]