Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Сборник статей
 
 

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

Автор: internet-technologies.ru

Почему этот плох метод определения пользователей по 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

}

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

 
 » Обсудить эту статью на форуме

 
 Сборник статей 
 Содержание раздела 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS