Скрипт cписок посетителей 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'");

?>




Рекомендуем почитать

 

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


Ваше имя:


Комментарий:


Введите: Картинка