Привет, Гость!
home login register
[+] Купить Рекламу
Хостинг для тебя! Заходи не пожалеешь
Что мы делаем полезного на официальном сайте WAP-поддержки? Подробно ...
Вступайте в нашу группу ВКОНТАКТЕ
Поздравляем, новичка с ID:1000
Как самомусделать QR-код
IT новости: в Windows новая опасная уязвимость
Проблемы восприятия IT
Как подтвердить авторство в Google

Учебник PHP #13
<< 1 ... 4 5 6 7 8 >>
преобразуются к исходному формату.

В листинге 13.7 продемонстрировано восстановление закодированных сеансовых переменных функцией session_decode( ). Предположим, таблица MySQL с именем user_info состоит из двух полей: user_id и page_data. Пользовательский UID, хранящийся в cookie на компьютере пользователя, применяется для загрузки сеансовых данных, хранящихся в поле page_data. В этом поле хранится закодированная строка переменных, одна из которых ($bgcolor) содержит цвет фона, выбранный пользователем.

Листинг 13.7. Восстановление сеансовых данных, хранящихся в базе данных MySQL

<?

// Предполагается, что переменная $usr_id (с уникальным

// идентификатором пользователя) хранится в cookie

// на компьютере пользователя.

$id = session_id($usr_id);

// Подключиться к серверу MySQL и выбрать базу данных users

@mysq]_pconnect("localhost", "web", "4tf9zzzf")

or die("Could not connect to MySQL server!");

@mysql_select_db("users")

or die("Could not select company database!");

// Выбрать данные из таблицы MySQL

$query = "SELECT page_data FROM user_info WHERE user_id= '$id'",

Sresult = mysql_query($query);

$user_data = mysql_result($result, 0. "page_data");

// Восстановить данные session_decode($user_data):

// Вывести одну из восстановленных сеансовых переменных

print "BGCOLOR: $bgcolor";

?>

Как видно из двух приведенных листингов, функции session_ encode( ) и ses-sion_decode( ) обеспечивают очень удобные и эффективные сохранение и загрузку сеансовых данных.

Назначение пользовательских функций для хранения сеансовых данных

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

Функция session_set_save_handler( ) определяет процедуры сохранения и загрузки сеансовых данных пользовательского уровня.

Синтаксис функции session_set_save_handler():

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

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

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

Таблица 13.2. Шесть параметров функции 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( ). Параметр $ключ соответствует имени сеансовой переменной, а параметр $значение — значению, связываемому с заданным ключом

Теперь, когда вы знаете все, что необходимо знать о параметрах session_set_save_handler( ), мы рассмотрим пример реализации сеансовых функций на базе MySQL (листинг 13.8).

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

<?

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

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

$host = "localhost"; $user = "web"; $pswd = "4tf9zzzf";

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

$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='Svalue'

WHERE sess_key = '$key'"; $result = mysql_query($result);

endif;

}

// Функция: mysql_sess_destroy()

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

function mysql_sess_destroy(Ssess_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)
Комментарии (0)
<< 1 ... 4 5 6 7 8 >>
Скачать Java книгу

»php/mysql/pdo/js
В библиотеку

На главную

Сообщество wap разработчиков I HwapCMS официальный сайт поддержки


RSS-лента
Генерация: 0.007 сек.