П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 177560 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 74881 раз(а).

Учебник HTML.
Просмотров 73665 раз(а).

Руководство по PHP5.
Просмотров 44577 раз(а).

Хостинг через призму DNS.
Просмотров 51342 раз(а).

Подборка текстов стандартных документов.
Просмотров 44702 раз(а).

Учебник PHP - Самоучитель
Просмотров 50954 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 51388 раз(а).

Внешние атаки...
Просмотров 41611 раз(а).

Учебник PHP.
Просмотров 36893 раз(а).

SSI в примерах.
Просмотров 27633 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





ГЛАВА 13. Cookie и отслеживание сеанса

Проект: журнал посещений сайта

Статистические сведения о посетителях сайта приносят немалую пользу. Как вы уже знаете, сохранение информации о посетителях широко практикуется на сайтах рекламных web-агентств и порталов, а также на многих других сайтах, желающих получить дополнительные сведения о своих посетителях. Хотя системы учета бывают невероятно сложными, даже относительно простая система ведения учета открывает немало интересных возможностей. Я покажу, как реализовать простейший журнал посещений на базе РНР, MySQL и cookie.

В проекте использована методика идентификации браузера, описанная в главе 8. Если вы пропустили главу 8 или описание проекта, я настоятельно рекомендую вернуться и просмотреть код проекта.

Как было сказано ранее, наша система будет относительно простой — посещения будут отслеживаться только для индексной страницы сайта. При появлении нового посетителя сценарий РНР проверяет, существует ли на компьютере посетителя cookie. Если cookie находится, значит, пользователь посещал сайт в течение определенного интервала времени(который задается администратором сайта в инициализационном файле), и сценарий не учитывает новое посещение. Если cookie отсутствует или интервал между посещениями превысил заданную величину, информация сохраняется в таблице MySQL, а на компьютер посетителя создается cookie.

Как реализовать подобный сценарий на РНР? Прежде всего необходимо создать таблицу MySQL для хранения информации:

mysql>create table visitors(
->browser char(85) NOT NULL. ->ip char(30) NOT NULL.
->host char(85) NOT NULL.
->timeOfVisit datetime NOT NULL
->);

В поле browser хранится информация, непосредственно относящаяся к браузеру посетителя. Она берется из переменной РНР с именем $HTTP_USER_AGENT. В поле ip хранится IP-адрес посетителя. В поле host хранится информация о провайдере, от которого поступил IP-адрес. Наконец, поле timeOfVisit содержит дату и время посещения сайта.

Полноценное приложение для ведения журнала посещений имеется на сайте ресурсов РНР phpinfo.net(http://www.phpinfo.net). Более того, вы сможете непосредственно

на сайте увидеть, как оно работает. К сожалению, перед посещением этого сайта вам

придется вспомнить школьный курс французского языка.

Затем мы создаем инициализационный файл приложения init.inc(листинг 13.9), содержащий определения глобальных переменных и основных функций. Обратите внимание: в функции viewStats() используется сценарий sniffer.php из главы 8. Этот сценарий включается в файл init.inc по мере необходимости. Рекомендую потратить немного времени на просмотр этого сценария и комментариев к нему.

Листинг 13.9. Инициализационный файл приложения(init.inc)

<?
// Файл: init.inc
// Назначение: инициализационный файл журнала посещений сайта

// Параметры соединения с сервером MySQL
$host = "localhost";
$user = "root";
$pswd = "";

// Имя базы данных 
$database = "myTracker";

// Имя таблицы 
$visitors_table = "visitors";

@mysql_pconnect($host, $user, $pswd) or die("Couldn't connect to MySQL server!");

// Выбрать базу данных
@mysql_select_db($database) or die("Couldn't select $database database!");

// Максимальное количество посещений, отображаемое в таблице 
$maxNumVisitors = "5";

// Имя cookie
$cookieName = "visitorlog";

// Значение cookie 
$cookieValue="1";

// Срок, который должен пройти с момента последнего посещения сайта,
// чтобы информация о текущем посещении была сохранена в базе данных.
// Если переменная $timeLimit равна 0. сохраняются все посещения
// независимо от их частоты.
// Остальные целочисленные значения интерпретируются как интервал
// времени в секундах.
$timeLimit = 3600;

// Формат отображения данных в браузере
$header_color = "#cbda74";
$table_color = "#000080";
$row_color = "IcOcOcO";
$font_color = "#000000";
$font_face = "Arial. Times New Roman. Verdana";
$font_size = "-1";

function recordUser() {
  GLOBAL $visitors_table, $HTTP_USER_AGENT, $REMOTE_AODR, $REMOTE_HOST; 

  if($REMOTE_HOST — "") :
    $REMOTE_HOST - "localhost";
  endif;

  $timestamp - date("Y-m-d H:i:S");
  $query - "INSERT INTO $visitors_table VALUES('$HTTP_USER_AGENT', '$REMOTE_ADDR', '$REMOTE_HOST', '$timestamp')";
  $result = @mysql_query($query); 
}

// recordUser
function viewStats() {
  GLOBAL $visitors_table, $maxNumVisitors, $table_color, $header_color;
  GLOBAL $row_color, $font_color, $font_face, $font_size;

  $query = "SELECT browser, ip, host, TimeofVisit FROM $visitors_table ORDER BY TimeofVisit desc LIMIT 0, $maxNumVisitors";
  $result = mysql_query($query);

  print "<table cellpadding=\"2\" cellspacing=\"1\" width = \"700\" border = \"0\" bgcolor=\ " $table_color\ ">";
  print "<tr bgcolor= \"$header_color\"><th>Browser</th><th>IP</th><th>Host</th><th>TimeofVisit</th></tr>";

  while($row = mysql_fetch_array($result));
    list($browse_type, $browse_version) = browser_info($row["browser"]); 
    $op_sys = opsys_info($row["browser"]);
    print "<tr bgcolor=\"$row_color\">";
    print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">$browse_type $browse_version = $op_sys</font></td>";
    print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">".$row["ip"]."</f ont></td>";
    print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">".$row["host"]."</font></td>";
    print "<td><font color=\"$font_color\" face=\"$font_face\" size=\"$font_size\">";
    print $row["TimeofVisit"]."</font></td>";
    print "</tr>";
  endwhile;

  print "</table>";
}

// viewStats
?>

Фрагмент кода, приведенный в листинге 13.10, проверяет существование cookie и при необходимости вызывает функцию recordUser(). Я привожу этот фрагмент в составе очень простого индексного файла index.php.

Листинг 13.10. Проверка существования cookie(index.php)

<?
include("Listing13-9.php");

if(! isset($$cookieName)) :

  // Создать cookie
  setcookie($cookieName, $cookieValue, time()+$timeLimit);

  // Сохранить информацию о посетителе 
  recordUser();
endif:
?>
<html>
<head>
<title>Wecome to My Site!</title>
</head>
<body bgcolor="#c0c0c0" text="#000000" link="#808040" " vlink="#808040" alink="#808040">
Welcome to my site. <a href = "visitors.php">Check out who else has recently visited</a>.
</body>
</html>

Как организовать просмотр информации, хранящейся в базе данных MySQL, в браузере? Задача решается простым вызовом функции viewStats() в отдельном файле visitors.php:

<html>
<?
include("sniffer.inc"):
include("init.inc");
?>
<head>
<title>Most recent <?=$maxNumVisitors:?> 
visitors</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#808040" vlink="#808040" alink="#808040">
viewStats();
?>
</body>
</html>

Возможно и другое решение — включить весь код HTML в функцию viewStats(), а затем просто включить sniffer.inc, init.inc и вызов viewStats() в отдельный файл. Выбор зависит от того, до какой степени вы хотите интегрировать форматирование таблицы с процессом выборки данных.

На рис. 13.1 показан пример выходных данных viewStats() для атрибутов форматирования, заданных в файле init.inc.

Рис. 13.1. Пример результата, сгенерированного функцией viewStats()

Существует немало путей для расширения практических возможностей этого приложения. Например, для отслеживания посещений со страницами сайта часто связываются идентификаторы, по которым в дальнейшем можно следить за перемещением пользователей между страницами. В рассмотренном проекте для этого в таблицу MySQL следует включить дополнительное поле, в котором хранится идентификатор страницы, а затем переопределить функцию recordllser() с дополнительным параметром. Идентификатор страницы сохраняется в cookie. При поступлении очередного запроса сценарий проверяет существование cookie для конкретной страницы, информация о которой регистрируется в журнале.

Назад | Содержание раздела | Общее Содержание | Вперед



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru