PHP уроки
ПРОСТО самая лучшая обучалка PHP!
  • Студия LPHPRU
  • Уроки PHP
  • Контакты
  • Помощь
Меню
  • PHP - с чего начать?
  • Уроки PHP
  • Функции PHP
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • JQuery уроки
  • Галерея
Календарь
Апрель (2021)
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
2627282930  
В продаже

  • Что нового?

    • Тест №2
    • Тест №1 для разработчиков
    • PHP 5.6 RC1
    • SQL. Как cкопировать данные одной колонки в другую, в той же таблице
    • GRUB изменить порядок загрузки OS в Linux
    • SSH - вход на сервер без ввода пароля
    • PhpMyAdmin - проблема с загрузкой большого файла на сервер
  • Комментарии

    • тут нечего не понятно
    • Может уже пора на WebStorm переходит...
    • Здравствуйте. 10 лет пользуюсь др...
    • Была такая проблема, решалась пе...
    • Возможно с течением времени этот...
  • TOP-5

    • Метод POST (2940402)
    • Привет, МИР! (907353)
    • Метод GET (662404)
    • Операторы (602296)
    • Firefox уже запущен, но не отвечает... (347605)

Как узнать сколько посетителей на сайте.

Главная » Уроки PHP » Как узнать сколько посетителей на сайте.
PHP урок № 174

Сколько посетителей на сайте (Online)

Чтобы это выяснить, как минимум надо определиться с регистрацией пользователей в БД. А уже затем считать сколько в данный момент находится на сайте. Так как с помощью протокола HTTP нельзя определить сколько человек находится online и когда кто зашёл. Организуем проверку данного факта с помощью механизма сессий. Для начала создадим таблицу в базе данных, назовём её sessions.

Листинг № 1 - Дамп таблицы sessions

CREATE TABLE `sessions` (
  `id_session` text NOT NULL,
  `up_date` datetime NOT NULL,
  `user` tinytext NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
  • id_session - ID сессии
  • up_date - время последнего обновления страницы
  • user - имя пользователя

Листинг № 2 - Скрипт регистрации посетителей

<?php
// инициализируем сессию 
session_start();

// ID сессии 
$id_session = session_id();

// устанавливаем соединение с базой данных
include "config.php";

// Проверяем в базе данных данный ID сессии 
$ro = "SELECT * FROM sessions WHERE id_session ='".$id_session."'";
$query = mysql_query($ro);
if(!
$query)exit(mysql_error()); 

// Если в БД уже есть такой ID сессии , следовательно 
// человек уже зашёл и пользуется ресурсом
// значит просто обновляем его последнее время обращение к серверу...
if(mysql_num_rows($query) > 0)
{
   
$sa = "UPDATE sessions SET up_date=NOW() WHERE id_session ='".$id_session."'";
   
$upd = mysql_query($sa);
}
else
{
//... в противном случаи, пользователь только зашёл, регистрируем его посещение,
// внося его идентификационный номер в БД (ID-сессии).
$as="INSERT INTO sessions VALUES('".$id_session."',NOW(),'".
    
$_SESSION['user']."')";
$into = mysql_query($as);
    
}

// Теперь чтоб определить когда пользователь вышел, предложим условие,
// если в течении 15 минут страницы с сервера больше не запрашивались,
// будем считать, что пользователь ушёл с сайта.
// Удаляем его ID сессии 
$del = mysql_query("DELETE FROM sessions WHERE up_date<NOW()-INTERVAL '15' MINUTE");

?>
Теперь этот скрипт нужно подключить с помощью функции include ко всем страницам, где необходима информация посещаемости, а точнее код который это делает. Саму функцию выводящую количество посетителей из БД можно посмотреть в листинге 3.

Листинг № 3 - Функция подсчитывает кол-во пользователей на сайте в данный момент.

<?php

// Добавляем функцию подсчёта пользователей
function online_users()
{
  
$q = mysql_query("SELECT COUNT(*) FROM sessions");
  if(
mysql_num_rows($q) > 0)
  {
     return 
mysql_result($q,0);  
  }
}

?>
Теперь объединим два листинга в одну страницу и назовём её users.php

Листинг № 4 - Страница users.php конечный результат

<?php
// инициализируем сессию 
session_start();

// ID сессии 
$id_session = session_id();

// устанавливаем соединение с базой данных
include "config.php";

// Проверяем в базе данных данный ID сессии 
$ta="SELECT * FROM sessions WHERE id_session = '".$id_session."'";
$query = mysql_query($ta);
if(!
$query)exit(mysql_error()); 

// Если в БД уже есть такой ID сессии , 
//следовательно человек уже зашёл и пользуется ресурсом
// значит просто обновляем его последнее время обращение к серверу...
if(mysql_num_rows($query) > 0)
{
$f = "UPDATE sessions SET up_date = NOW() WHERE id_session = '".$id_session."'";
$upd = mysql_query($f);
}
else
{
//... в противном случаи, пользователь только зашёл, 
// регистрируем его посещение,
// внося его идентификационный номер в БД (ID-сессии).
$e="INSERT INTO sessions VALUES('".$id_session."', NOW(), '".$_SESSION['user']."')";
$into = mysql_query($e);
    
}

// Теперь чтоб определить когда пользователь вышел, предложим условие,
// если в течении 15 минут страницы с сервера больше не запрашивались,
// будем считать, что пользователь ушёл с сайта.
// Удаляем его ID сессии 
$q = "DELETE FROM sessions WHERE up_date < NOW() - INTERVAL '15' MINUTE";
$del = mysql_query($q);


// Добавляем функцию подсчёта пользователей
function online_users()
{
  
$q = mysql_query("SELECT COUNT(*) FROM sessions");
  if(
mysql_num_rows($q) > 0)
  {
     return 
mysql_result($q,0);  
  }
}

?>
Теперь страницу users.php надо подгрузить к основной странице. Назовём страницу index.php.

Листинг № 5 - Страница index.php

<?php
// подключаем файл сессий 
include "users.php";

// функция выводит на монитор количество записей в таблице sessions
echo "Пользователи On-line: ".online_users();

?>
Скачать файлы урока
Зеркало

Урок закончен

SETTER © LPHP.RU
Администрация сайта
26.09.2009 02:33:04

Понравился урок? Не пропусти следующий!
Рекомендованные уроки этого раздела:
  • Передвигаем картинку. Двигаем рисунок.
  • SSH - вход на сервер без ввода пароля
  • Как создать свой сайт? Урок третий.
  • Подсчитать количество строк в файле.

Напишите свой комментарий
Ваше имя
Сообщение
Введите цифры с картинки:
 

Комментарии

Сергей 25.01.2011 16:44:14
Спасибо! Всё четко и понятно, а самое главное вживляется в свой код на счет раз!
DEADMEMORIE 17.07.2011 11:59:28
то что искал ) огромное спасибо ))
Константин 24.11.2011 11:25:31
Спасибо! Первый скрипт, который у меня заработал корректно! У Вас ошибка в строке: $e="INSERT INTO sessions VALUES('".$id_session."', NOW(), '".$_SESSION['user']."')" Нужно поставить точку с запятой, т.е. должно быть так: $e="INSERT INTO sessions VALUES('".$id_session."', NOW(), '".$_SESSION['user']."')";
Константин 24.11.2011 11:28:11
Спасибо! Первый скрипт, который у меня заработал корректно! У Вас ошибка в Листинг 4, переменная e. В конце нужно поставить ;
SETTER 24.11.2011 11:33:22
Спасибо, поправил.
Виктор 13.12.2011 15:22:41
крутой урок про часы.
Spawnet 10.09.2012 10:28:14
Нашёл что искал. спасибо автору.С уважением,spawnet.
BeeR 13.11.2012 14:33:07
У меня почему-то id_session состоит из 32 символов, а не 11 цифр...
Марк 18.12.2012 09:15:43
Здравствуйте. Подскажите пожалуйста, этот же код можно использовать для вывода на странице пользователя онлайн ли он или уже покинул сайт? Как правильно написать условие, чтобы надпись Онлайн выводилась на странице пользователя?
Максим 08.01.2013 12:16:15
Красавчик! пост прям лучший, спасибо огромное.
  • Яндекс.Метрика Здесь находится аттестат нашего WM идентификатора 185571665285
  • "LPHPRU" © 2009-2021