29.11.2022

Скрипт «Список посетителей OnLine»

Часто на сайтах можно видите фразу, сейчас данный сайт просматривает столько-то человек, или даже список зарегистрированных посетителей, находящихся в данным момент на сайте. Обычно такой сервис называют «Список посетителей OnLine». Учитывая, что у посетителя может динамически меняться IP-адрес, или наоборот несколько посетителей могут выходить в Интернет из под одного IP-адреса, для подсчёта уникальных посетителей на сайте прибегают к сессиям. Создадим таблицу session в которой будем хранить уникальные идентификаторы сессии (SID), назначенные посетителям.

Таблица session

CREATE TABLE session ( 
  id_session tinytext NOT NULL, 
  putdate datetime NOT NULL default '0000-00-00 00:00:00', 
  user tinytext NOT NULL 
) TYPE=MyISAM;

Таблица имеет три поля — id_session, поле, куда помещается SID сессии, поле putdate, для того, хранения времени обращения посетителя к страницам сайта и поле user, которое нами использоваться не будет, но в котором можно хранить имя пользователя, если у вас имеется система авторизации и вы хотите различать гостей и авторизованных пользователей. Предполагается, что имя пользователя помещается в элемент суперглобального массива $_SESSION[‘user’] — если вас интересует авторизация на PHP, с нейм можно ознакомиться по ссылке

В начало каждой страницы сайта, которая будет участвовать в регистрации посетителей следует при помощи конструкции require_once() поместить следующий код.

Скрипт регистрации посетителей в таблице session

<?php 
  // Начинаем сессию 
  session_start(); 
  // Получаем уникальный id сессии 
  $id_session = session_id(); 
  // Устанавливаем соединение с базой данных 
  include "config.php"; 
  // Проверяем, присутствует ли такой id в базе данных 
  $query = "SELECT * FROM session 
            WHERE id_session = '$id_session'"; 
  $ses = mysql_query($query); 
  if(!$ses) exit("<p>Ошибка в запросе к таблице сессий</p>"); 
  // Если сессия с таким номером уже существует, 
  // значит пользователь online - обновляем время его 
  // последнего посещения 
  if(mysql_num_rows($ses)>0) 
  { 
    $query = "UPDATE session SET putdate = NOW(), 
                                 user = '$_SESSION[user]' 
              WHERE id_session = '$id_session'"; 
    mysql_query($query); 
  } 
  // Иначе, если такого номера нет - посетитель только что 
  // вошёл - помещаем в таблицу нового посетителя 
  else 
  { 
    $query = "INSERT INTO session 
              VALUES('$id_session', NOW(), '$_SESSION[user]')"; 
    if(!mysql_query($query)) 
    { 
      echo $query."<br>"; 
      echo "<p>Ошибка при добавлении пользователя</p>"; 
      exit(); 
    } 
  } 
  // Будем считать, что пользователи, которые отсутствовали 
  // в течении 20 минут - покинули ресурс - удаляем их 
  // id_session из базы данных 
  $query = "DELETE FROM session 
            WHERE putdate < NOW() -  INTERVAL '20' MINUTE"; 
  mysql_query($query); 
?>

Протокол HTTP не является сессионным протоколом, поэтому мы можем фиксировать только обращения посетителей к страницам сайта — сколько после этого посетитель будет читать страницу — одному богу известно — получить эту информацию мы не сможем. Поэтому мы будем считать, что если посетиель не обращается к страницам сайта более 20 минут — он ушёл и его можно удалять из таблицы session.

Теперь нам остаётся только вывести содержимое таблицы session или подсчитать число посетителей в ней.

Выводим содержимое таблицы session

<?php 
  // Устанавливаем соединение с базой данных 
  include "config.php"; 
  // Выводим имена всех посетителей, записи о которых имеются 
  // в таблице session 
  $query = "SELECT * FROM session"; 
  $ath = mysql_query($query); 
  if(!$ath) exit("<p>Ошибка в запросе к таблице сессий</p>"); 
  // Если хоть кто-то есть - выводим таблицу 
  if(mysql_num_rows($ath)>0) 
  { 
    echo "<table>"; 
    while($author = mysql_fetch_array($ath)) 
    { 
      // Если посетитель не зарегистрирован 
      // выводим вместо его имени - "аноним" 
      if(empty($author['user'])) echo "<tr><td>аноним</td></tr>"; 
      else echo "<tr><td>".$author['user']."</td></tr>"; 
    } 
    echo "</table>"; 
  } 
?>

Для установки соединения с базой данных, нам потребуется конфигурационный файл config.php, следующего содержания.

Конфигурационный файл config.php

<?php
  ////////////////////////////////////////////////////////////
  // 2003-2011 (C) IT-студия SoftTime (http://www.softtime.ru)
  ////////////////////////////////////////////////////////////
  // сейчас выставлен сервер локальной машины
  $dblocation = "localhost";
  // Имя базы данных, на хостинге или локальной машине
  $dbname = "dbase";
  // Имя пользователя базы данных
  $dbuser = "root";
  // и его пароль
  $dbpasswd = "";

  // Устанавливаем соединение с базой данных
  $dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
  if (!$dbcnx) {
   exit( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" );
  }
  // Выбираем базу данных
  if (! @mysql_select_db($dbname,$dbcnx) ) {
    exit( "<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" );
  }

  // Устанавливаем кодировку соединения
  @mysql_query("SET NAMES 'cp1251'");
?>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *