Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции.rtf
Скачиваний:
115
Добавлен:
15.06.2014
Размер:
24.67 Mб
Скачать

Void session_set_save_handler (string open, string close, string read, string write, string destroy, string go)

Шесть параметров session_set_save_handler( ) соответствуют шести функциям, вызываемым сеансовыми функциями РНР. Хотя имена этих функций могут быть произвольными, каждая функция должна получать жестко заданный набор параметров. Перед тем как переходить к рассмотрению примера, просмотрите таблицу 1 — в ней описаны назначение всех шести функций и их параметры.

Чтобы использовать функцию session_set_save_handler( ), необходимо присвоить параметру session.save_handler в файле php.ini значение user.

Таблица 5.9 – Шесть параметров функции session_set_save_handler( )

Параметр

Описание

sess_close( )

Вызывается при завершении сценария, в котором реализуются сеансовые функции. Не путайте эту функцию с функцией sess_destroy( ), предназначенной для уничтожения сеансовых переменных. Функция sess_close( ) вызывается без параметров

sess_destroy($идент_ceaнca)

Удаляет все сеансовые данные. Параметр определяет удаляемый сеанс

sess_gc($срок_действия)

Удаляет все сеансы с завершенным сроком действия. Срок определяется параметром $срок_действия, значение которого задается в секундах. Параметр читается из файла php.ini и соответствует значению session.gcjifetime

sess_open($путь, $имя)

  Вызывается при инициализации нового сеанса функцией session_start( ) или session_register( ). Два параметра читаются из файла php.ini и соответствуют значениям session.save_path и session.name

sess_read($ключ)

Используется для выборки значения сеансовой переменной, определяемой заданным ключом

sess_write($ключ, $значение)

Используется для сохранения сеансовых данных. Любые данные, сохраненные функцией sess_write( ), позднее могут быть прочитаны функцией sess_read( ). Параметр $ключ соответствует имени сеансовой переменной, а параметр $значение — значению, связываемому с заданным ключом

Теперь рассмотрим пример реализации сеансовых функций на базе MySQL.

Реализация сеансовых функций на базе MySQL

<?

// Реализация сеансовых функций на базе MySQL

// Хост, имя пользвателя и пароль

$host = "localhost"; $user = "root"; $pswd = "";

// Имена таблицы и базы данных

$db = "users";

$session_table = "user session data";

// Прочитать значение sess.gc_lifetime из файла php.ini

$sess_life = get_cfg_var("sess.gc_lifetime");

// Функция : mysql_sess_open() Назначение: подключение к серверу MySQL и выбор базы данных.

function mysql_sess_open($save_path. $session_name) {

GLOBAL $host. $user, $pswd, $db;

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

@mysql_select_db($db) or die("Can't select session database!");

}

// Функция: mysql_sess_close() Назначение: в реализации на базе MySQL эта функция не используется.

// Тем не менее, она Обязательно* должна быть определена.

function diysql_sess_close() {

return true:

}

// Функция: mysql_sess_read() Назначение: загрузка информации из базы данных MySQL.

function mysql_sess_read($key) {

GLOBAL $session_table:

$query = "SELECT value FROM $session_table WHERE sess_key = '$key'";

$result = mysql_query( $query);

if (list($value) = mysql_fetch_row($result)) :

return $value;

endlf;

return false;

}

// Функция: mysql_sess_write( ) Назначение: запись информации в базу данных MySQL.

function mysql_sess_write($key, $val) {

GLOBAL $sess_life, $session_table;

$expiratlon = time() + $sess_life;

$query = "INSERT INTO Ssession_table VALUES('$key', '$expiration', '$value')";

$result = mysql_query($query);

// Если запрос на вставку данных завершился неудачей

// из-за присутствия первичного ключа в поле sess_key, выполнить обновление.

if (! $result) :

$query = "UPDATE $session_table SET sess_expiration = '$expiration', sess_value='$value'

WHERE sess_key = '$key'";

$result = mysql_query($result);

endif;

}

// Функция: mysql_sess_destroy() Назначение: удаление из таблицы всех записей с ключом, равным $sess_id

function mysql_sess_destroy($sess_id) {

GLOBAL $session_table;

$query = "DELETE FROM $session_table WHERE sess_key = '$sess_id'";

$result = mysql_result($query);

return $result;

}

// Функция: mysql_sess_gc() Назначение: удаление всех записей, у которых

// срок жизни < текущее время - session.gc_lifetime

function mysql_sess_gc($max_lifetime) {

GLOBAL $session_table;

$query = "DELETE FROM $session_table WHERE sess_expiration < ".time();

$result = mysql_query($query);

return mysql_affected_rows();

session_set_save_handler("mysql_sess_open", "mysql_sess_close","mysql_sess_read", "mysql_sess_write", "mysql_sess_destroy", "mysql_sess_gc");

?>

После того как эти шесть функций будут зарегистрированы в программе, их можно вызывать по абстрактным именам (sess_close( ), sess_destroy( ), sess_gc( ), sess_open( ), sess_read( ) или sess_write( )). Такой подход удобен тем, что можно создать сколько угодно реализаций и переключаться между ними, вызывая ses-sion_set_save_handler( ) по мере необходимости.

http.html://doks.gorodok.net/996Журнал посещений сайта

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

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

Прежде всего необходимо создать таблицу MySQL для хранения информации:

create table visitors (

browser char(85) NOT NULL,

Соседние файлы в предмете Программирование для Web