Sep
18
2010
Список посетителей 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

  
///////////////////////////////////////////////////

  // 2006 (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>" );

  }



  
// Определяем версию сервера

  
$query "SELECT VERSION()";

  
$ver mysql_query($query);

  if(!
$ver) exit("Ошибка при определении версии MySQL-сервера");

  
$version mysql_result($ver0);

  list(
$major$minor) = explode("."$version);

  
// Если версия выше 4.1 сообщаем серверу, что будем работать с

  // кодировкой cp1251

  
$ver $major.".".$minor;

  if((float)
$ver >= 4.1)

  {

    
mysql_query("SET NAMES 'cp1251'");

  }

?>


 

Комментарии
Добавить новый Поиск
Оставить комментарий
Имя:
Email:
 
Веб-сайт:
Тема:
UBB-Код:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Пожалуйста, введите проверочный код, который Вы видите на картинке.
Powered by !JoomlaComment 3.26

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 

Кто онлайн

Сейчас 56 гостей онлайн