Сохранение сессий в файл

Помимо создания сессии и сохранения её данных при переходах между страницами существует еще одна очень полезная возможность. Что если мы могли бы сохранить данные одной сессии для использования в другой, возвращаясь к информации, которая была сохранена несколько дней назад? PHP предоставляет эту возможность, позволяя сохранять данные сессии в файле.

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

Еще одним хорошим примером является использование этой функции в сочетании с корзиной. Предположим, у вас есть корзина, которая создает заказ на основе выбора пользователя и сохраняет эту информацию под уникальным идентификатором где-либо в виде сочетания идентификатора пользователя и номера сессии.

Теперь предположим, что связь обрывается, и данные сессии потеряны. Если вы сохранили исходные данные сессии, тогда при повторном подключении и авторизации пользователей вся информация будет в сохранности и останется только вывести незаконченный заказ. Это очень обрадует покупателя!

Итак, перейдем к методике, которая достаточно проста: мы будем использовать функцию fopen для открытия файла, функцию session_encode для перекодировки данных сессии в строку, функции fputs и fclose для записи и закрытия файла. Далее приведен пример:

<?php

session_register("username");
session_register("password");
session_register("ordernumber");

$username = "Goody";
$password = "mypass";
$ordernumber = "1234";

$sessionfile = fopen("sessionfile.txt", "w");
fputs($sessionfile, session_encode( ) );
fclose($sessionfile);

?>

Как вы видите, мы создаем три переменные сессии для хранения информации, которая нам понадобится, и в данном примере просто заполняем эти переменные строковыми данными. Вам придется вспомнить работу с файловой системой при использовании функций, показанных в этом примере. Здесь мы видим, что внутри команды fputs используется функция session_encode, чтобы получить данные сессии (которые включают в себя все переменные сессии, кроме номера сессии) и перекодировать их в строку, которая будет записана в файл с помощью функции fputs.

Теперь, когда мы благополучно спрятали данные, нам понадобится метод для извлечения этих данных по мере необходимости. Для этого будем использовать функцию fgets, чтобы прочитать запись, и session_decode для извлечения данных сессии из записи:

<?php
session_start( );
?>

<html><head> ....... и т.д.

<?php

$sessionfile = fopen("sessionfile.txt", "r");
session_decode(fgets($sessionfile, 4096) );
fclose($sessionfile);
?>

Здесь кое-что следует отметить. Сначала создается новая сессия (вызов функции session_start находится перед всем остальным кодом), поскольку активная сессия нужна чтобы создать переменные session_variables, что и делает функция session_decode.

Затем вы заметите, что инструкции session_encode и session_decode записаны наоборот по отношению друг к другу в соответствующих функциях fputs и fgets. Считайте, что при записи функция fputs содержит session_encode; при чтении, чтобы расшифровать результат fgets, функция session_decode содержит fgets. (Технически это может быть не совсем верно говорить, что одна функция "содержит" другую, но в данном случае это очень удобно).

Другой важный момент, который не стоит упускать из виду, это область видимости переменных. В первом из вышеприведенных примеров, у нас есть конкретные операторы для определения переменной сессии, так что их область видимости может быть более очевидной, но во втором примере, переменная будет определена функцией session_decode, поэтому область видимости не так просто определить сразу. В любом случае, если определение переменной происходит внутри функции (то есть, вы написали эту инструкцию внутри некоторой функции) область видимости session_variables будет локальной для этой функции. Если это не то, что вы хотите, вы должны добавить параметр "global". Во втором примере выше, это будет означать определение глобальной области видимости для переменных до вызова функции session_decode, например:

$sessionfile = fopen("sessionfile.txt", "r");
global $username, $password, $ordernumber;
session_decode(fgets($sessionfile, 4096) );
fclose($sessionfile);

Наконец, вы можете изменить имя используемого файла. В данных примерах мы использовали файл под названием "sessionfile.txt". Гораздо удобнее было бы использовать в качестве имени файла идентификатор пользователя или комбинацию имени пользователя и приложения (например, "vincebarnesorders.txt"), чтобы было понятно, из какого файла брать информацию, если пользователь вернется обратно.

Поделитесь ссылкой если мы вам помогли!

Читайте также:

Создание оффлайн-приложений на HTML5

Apple ipad 2 характеристики, стоимость

Что такое плагины для Google Сhrome

Заработок на Twitter

Как узнать на каком движке сайт?

Добавить комментарий:

Минимум 100 символов.
Модераторы detected!

Вы ввели сообщение длиной символов

Три + Пять ? =