Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Практикум. Система On-line пользователей.

Поиск:
Очень часто на многих форумах новички спрашивают: "как посчитать число пользователей, просматривающих сайт".По сути, это один из самых простых скриптов, которые только могут присниться.

Основной параметр идентификации пользователя – IP.

В данной статье я по сути несколько расширяю статью: «Практикум. Пишем систему Регистрации/Авторизации». Ниже я дам код, который необходимо будет вставить в то место, где мы показываем пользователю текст «Welcome», т.е. авторизованную зону.

1. Создаем таблицу в Базе Данных (MySQL)
2. Подготовка.
3. Обновление информации
4. Показываем число всех пользователей, гостей и авторизированных пользователей.
5. Что дальше? Что можно усложнить?

-------------------------------------------------

1. Создаем таблицу в Базе Данных (MySQL)

Код
CREATE TABLE `online` (
`user` INT NOT NULL ,
`ip` TINYTEXT NOT NULL ,
`time` INT( 14 ) NOT NULL
);

Поле user будет содержать ID пользователя, 0, - если гость. Ip – IP адрес, time – время последнего действия пользователя.

Я намеренно не беру активность пользователей из таблицы сессий авторизации, поскольку, как, по сути, эта таблица является логическим продолжением той (auth_sessons), и заменяет ее при разработке крупных приложений.

2. Подготовка

Как и в предыдущей статье, опишу функции, которые нам понадобятся.
Получение IP пользователя:
Код
<?php
function get_ip()
 {
  if ($ip = getenv("HTTP_CLIENT_IP"))
   {  return $ip;  }

  if ($ip = getenv("HTTP_X_FORWARDED_FOR"))
   {
    if ($ip == '' || $ip == "unknown")
     {  $ip = getenv("REMOTE_ADDR");  }

    return $ip;
   }
  if ( $ip = getenv("REMOTE_ADDR") )
   {  return $ip;  }
 }
?>


3. Обновление информации

Для реализации нам понадобятся 1 функция, которая будет обновлять время последней активности пользователя или гостя.
Код
<?php

function action( $user )
 {
  $ip = get_ip();

  $minutes = 15;

  $result = mysql_query( "SELECT `*` FROM `online` WHERE `user` = " . $user . " AND `ip` = '" . $ip . "' AND `time` >= " . ( time() - ( $minutes * 60 ) ) ) . " LIMIT 1" );

  if( mysql_num_rows( $result ) == 0 )
   {  mysql_query( "INSERT INTO `online` VALUES( " . $user . " , '" . $ip . "'  , " . time() . " )" );  }
  else
   {  mysql_query( "UPDATE `online` SET `time` = " . time() . " WHERE `ip` = '" . $ip . "'" );  }
 }

?>

Функция принимает в качестве параметра – ID пользователя. 0 – для гостя. Поэтому для обновления информации в скрипте авторизации надо в нужном месте вызвать данную функцию.

Что она делает. Первым делом мы получаем в переменную IP пользователя. Затем смотрим, совершал ли за последние N минут (переменная $minutes) какие либо действия.
Если нет, то создаем для его действий запись (по сути открывая сессию, как в авторизации). В противном случае обновляем время последнего действия, устанавливая текущее.

4. Показываем число всех пользователей, гостей и авторизированных пользователей

Код
<?php

function get_count()
 {
  $minutes = 15;

  $result = mysql_query( "SELECT COUNT(`user`) AS cnt FROM `online` WHERE `time` >= " . ( time() - ( $minutes * 60 ) ) );

  $cnt = mysql_result( $result , 0 , 'cnt' );

  print "Всего пользователей на сайте за последние 15 минут: " . $cnt . "<br>";

  $result = mysql_query( "SELECT COUNT(`user`) AS cnt FROM `online` WHERE `user` = 0 AND `time` >= " . ( time() - ( $minutes * 60 ) ) );

  $cnt = mysql_result( $result , 0 , 'cnt' );

  print "Гостей на сайте за последние 15 минут: " . $cnt . "<br>";

  $result = mysql_query( "SELECT COUNT(`user`) AS cnt FROM `online` WHERE `user` > 0 AND `time` >= " . ( time() - ( $minutes * 60 ) ) );

  $cnt = mysql_result( $result , 0 , 'cnt' );

  print "Авторизированных пользователей на сайте за последние 15 минут: " . $cnt . "<br>";
 }

?>

Тут я думаю пояснять не надо и так все понятно.

5. Что дальше? Что можно усложнить?

Попробуй те усложнить данный скрипт.
1. Показываем список пользователей
2. Показываем страницу, где пользователь последний раз находился.

-----------------------------------------------------

Ниже я прикрепляю полностью рабочий файл online.php.
http://forum.vingrad.ru/index.php?act=modu...2850&attachid=1
Автор: Mal Hack
Сайт: http://mal-hack.net






Просмотров: 4452

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную