Основные сведения о сессиях
Сессии похожи на файлы "cookie", но обладают значительно более широкими возможностями.
Используя сессии, вы можете поддерживать индивидуальную пользовательскую информацию без записи
множества файлов "cookie" и даже без использования базы данных. В этой главе вы узнаете,
как сделать следующее:
начать сессию;
регистрировать переменную сессии;
организовать счетчик посещений страницы для каждого пользователя;
поддерживать настройки пользователя на нескольких страницах.
Пpoвepкa файла php.ini
Перед началом работы с сессиями, проверьте значение в вашем файле php.ini.
Откройте с помощью любого текстового редактора файл php.ini.
Найдите строку, содержащую текст:
session.save_path = /tmp ; argument passed to save_handler
; in the case of files, this is the
; path where data files are stored
Вам необходимо изменить значение параметра session.save_path так, чтобы файлы могли быть записаны в
существующую папку. Это в первую очередь касается пользователей операционной системы Windows.
Изменение достаточно простое.
Введите путь к любой, существующей на жестком диске вашего
компьютера, папке после знака = для переменной session.save_path. Для пользователей Windows
можно, например, указать:
session.save_path = /Windows/temp ; argument passed to save_handler
; in the case of files, this is the ; path where data files are stored
Сохраните сделанные изменения в файле php.ini.
Что такое сессия?
В терминологии времени, сессия - это период времени, в течение которого пользователь посещает сайт.
Можно еще провести аналогию с буфером обмена: как буфер обмена может хранить в себе самые разные
объекты, так и в сессию можно поместить перемен-ные и значения любых типов. Вот основные моменты,
касающиеся процесса создания сессии:
Сессия имеет идентификационную строку примерно такого вида:
940f8b05a40d5119c030c9c7745aead9.
Эта идентификационная строка автоматически отправляется пользователю в файл "cookie" с
именем PHPSESSID в момент инициализации сессии.
На сервере создается соответствующий временный файл с таким же именем (940f8b05a40d5119c030c9c7745aead9).
Переменные сессии
Во временном файле сессии на Web-сервере регистрируются и хранятся переменные сессии и их значения.
Поскольку эти значения и переменные не содержатся в базе данных, то не требуется дополнительных
системных ресурсов, чтобы подключаться и извлекать информацию из таблиц базы данных .
Например, временный файл сессии может содержать следующие переменные:
count | s:7:"76";
valid | s:7:"yes";
В этом примере count и valid - имена зарегистрированных переменных, а "76" и "yes" -
соответствующие им значения. Ключевое слово здесь "зарегистрированных". Вы должны зарегистрировать
переменные в активной сессии перед тем, как извлекать значения, используя переменные $count или $valid,
как в этом примере.
Когда вы пытаетесь извлечь зарегистрированную переменную сессии (например, count) то последовательность
шагов будет выглядеть примерно так:
синтаксический анализатор РНР получает значение $PHPSESSID из файла "cookie" пользователя.
Напомним, что в этой переменной хранится идентификационная строка сессии;
синтаксический анализатор РНР ищет соответствующий временный файл сессии;
внутри временного файла сессии синтаксический анализатор РНР ищет count и затем его значение ("76");
переменной $count присваивается значение 76.
Далее мы начнем с вашего собственного сценария создания счетчика посещений страницы для каждого
пользователя. Этот счетчик будет создан с помощью сессии.
Зanycк сессии
Начать сессию очень просто. Вы просто вызываете функцию session_start( ) и PHР сам
позаботится об остальном - отправит файл "cookie" и создаст временный файл.
Создайте с помощью текстового редактора новый файл.
Начните блок РНР:
Чтобы вызвать функцию session_start ( ), введите строку:
Функция session_start ( ) выполняет несколько важных задач. Во-первых, она проверяет,
была ли запущена сессия для текущего пользователя, и запускает ее, если это необходимо.
Она также сообщает РНР о том, что переменные сессии и другие связанные с сессией функции будут
использоваться в определенном сценарии.
Вследствие двойного назначения функции session_start( ), используйте ее в начале всех
связанных с сессией сценариев.
Чтобы создать переменную для хранения сообщения, введите строку:
Закройте блок РНР:
Введите следующий блок HTML:
Выведите сообщение:
Завершите HTML-документ:
Сохраните созданный файл с именем session.php в папке для документов вашего Web-сервера.
Запустите браузер, в поле ввода Адрес введите
http://localhost/session.php
и нажмите клавишу Enter. В рабочее окно браузера будет загружена страница с сообщением о
начале сессии (Рис. 13.1).
Рис. 13.1. Страница Начало Сессии
Это уже вдохновляет, не так ли? В следующем знакомстве вы зарегистрируете существующую переменную и
проследим ее изменения в течение сессии.
Регистрация и изменение переменных сессии
Цель этого сценария — зарегистрировать переменную и изменить ее значение на протяжении сессии
пользователя.
Создайте с помощью текстового редактора новый файл.
Начните блок РНР:
Чтобы вызвать функцию session_start ( ), введите строку:
Чтобы зарегистрировать переменную с именем count, введите строку:
Теперь, пока существует сессия, будет доступна переменная с именем $count. В настоящий момент
переменная не имеет значения.
Чтобы увеличить значение переменной $count для учета текущего посещения страницы, введите код:
Чтобы создать переменную для хранения сообщения с переменной $count, введите строку.
Закройте блок РНР:
Введите следующий блок HTML:
Чтобы напечатать сообщение, введите код:
Чтобы завершить HTML-документ, введите код:
Сохраните созданный файл с именем countme.php в папке для документов вашего Web-сервера.
Запустите свой Web-браузер, в поле ввода Адрес: введите
http://localhost/countme.php
и нажмите клавишу Enter. В рабочее окно браузера будет загружена страница Счетчик (Рис. 13.2)
Рис. 13.2. Страница Счетчик
Не закрывая окно браузера, несколько раз перезагрузите страницу с помощью кнопки Обновить,
расположенной на панели инструментов. Обратите внимание на изменение счетчика при каждой перезагрузке.
На Рис. 13.3 показана страница Счетчик после восьми перезагрузок.
Рис. 13.3. Страница Счетчик после восьми перезагрузок
В следующем упражнении вы сделаете больше, чем счетчик посещений страницы: установите и отобразите
настройки пользователя во время его сессии.
Управление настройками пользователя во время сессии
Идя далее простого счетчика посещений, вы можете использовать сессии, чтобы управлять настройками
пользователей, когда они посещают ваш сайт. В рассматриваемом в этом знакомстве примере, состоящем
из трех этапов, мы запустим сессию, попросим пользователя настроить для себя тип и базовый размер
шрифта, покажем эти настройки на последующих страницах, позволим пользователю изменять их по
собственному желанию и переустановить значения.
3anycк сессии, регистрация значений по умолчанию
В этом сценарии вы запустите сессию и зарегистрируем переменные $font_family и $font_size.
Отображаемой HTML-страницей будет форма, которая позволит вам изменить ваши настройки.
Создайте с помощью текстового редактора новый файл.
Начните блок РНР:
Чтобы начать сессию, введите строку:
Чтобы зарегистрировать две переменных сессии, начните оператор if. . .else, который проверит,
существует ли значение переменной $PHPSESSID, введите строку:
Чтобы зарегистрировать две переменные, если $PHPSESSID не имеет значения, введите код:
Чтобы проверить, существуют ли предыдущие значения переменных, если значение
$PHPSESSID существует, введите код:
Чтобы зарегистрировать переменные, если предыдущие их значения не существуют, и закрыть оператор if... else,
введите код:
Поскольку пользователь будет возвращаться к этому сценарию для переустановки своих настроек отображения
текста, вы должны принимать во внимание тот факт, что значения переменных должны всегда извлекаться из
самой сессии.
Если вы просто зарегистрируете переменные, без проверки предыдущих значений, то каждый раз при загрузке
страницы значения этих переменных будут перезаписываться, и новым значением будет пустая строка.
Если предыдущие значения не существуют, то чтобы установить значения для зарегистрированных переменных
сессии по умолчанию, введите код:
Закройте блок PHP:
Начните блок HTML:
Создайте таблицу стилей, начав с тега <STYLE>:
Чтобы добавить в таблицу стилей описание тегов BODY, Р, А, используйте код РНР для вставки в
код HTML текущих значений переменных $font_family и $font_size:
Чтобы добавить в таблицу стилей описание тега H1, используйте код РНР для вставки в код HTML текущего
значения переменной $font_family и измененного значения переменной $font_size
(основное значение плюс 4):
Чтобы закрыть таблицу стилей, введите тег:
Чтобы продолжить блок HTML, добавить заголовок и начать форму с методом post и действием session02.php,
введите код:
Чтобы создать переключатели для выбора шрифта нового наименования, введите код:
Чтобы создать переключатели для выбора нового базового размера шрифта, введите код:
Чтобы создать кнопку с надписью Установить, введите строку:
Чтобы закрыть форму и завершить блок HTML, введите код:
Сохраните созданный файл с именем session01.php в папке для документов вашего Web-сервера.
На рисунке 13.4 приведен полный листинг документа session01.php без комментариев. Ориентируясь
на него проверьте, нет ли в вашем листинге ошибок.
Рис. 13.4. Листинг файла session01.php без комментариев.
Запустите свой Web-браузер, в поле ввода Адрес: введите
http://localhost7session01.php
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Мои Настройки Отображения (Рис. 13.5).
Рис. 13.5. Страница Мои Настройки Отображения
Далее вы создадите сценарий, управляющий изменениями настроек.
Изменение нacтpoeк
В этом сценарии мы будем определять новые значения переменных $font_family и $font_size и
отображать подтверждение, что изменения произведены.
Создайте с помощью текстового редактора новый файл.
Начните блок РНР:
Чтобы начать сессию, введите строку:
Чтобы зарегистрировать две переменных сессии, начните оператор if. . .else, который проверит,
существует ли значение переменной $PHPSESSID, введите строку:
Чтобы зарегистрировать две переменные, если $PHPSESSID не имеет значения, введите код:
Чтобы проверить, существуют ли предыдущие значения переменных, если значение
$PHPSESSID существует, введите код:
Чтобы зарегистрировать переменные, если предыдущие их значения не существуют, и закрыть оператор if... else,
введите код:
Если предыдущие значения не существуют, то чтобы установить значения для зарегистрированных переменных
сессии по умолчанию, введите код:
Закройте блок PHP:
Начните блок HTML:
Создайте таблицу стилей, начав с тега <STYLE>:
Чтобы добавить в таблицу стилей описание тегов BODY, Р, А, используйте код РНР для вставки в
код HTML текущих значений переменных $font_family и $font_size:
Чтобы добавить в таблицу стилей описание тега H1, используйте код РНР для вставки в код HTML текущего
значения переменной $font_family и измененного значения переменной $font_size
(основное значение плюс 4):
Чтобы закрыть таблицу стилей, введите тег:
Чтобы продолжить блок HTML и отобразить значение двух зарегистрированных переменных, введите код:
Чтобы создать ссылку на предыдущий сценарий для возможности еще раз изменить настройки, введите код:
Чтобы закрыть блок HTML и документ, введите код:
Сохраните созданный файл с именем session02.php в папке для документов вашего Web-сервера.
Если вы не закрывали свой Web-браузер с момента загрузки последнего сценария и все еще находитесь на
странице с формой выбора настроек отображения шрифта, в группе переключателей Выберите Шрифт
установите переключатель sans-sherif.
В группе переключателей Выберите базовый размер шрифта установите переключатель 14 pt.
Нажмите кнопку Установить. В рабочее окно браузера будет загружена страница Мои Настройки
Отображения с сообщением об установленных параметрах шрифта (Рис. 12.6).
Рис. 13.6. Страница Мои Настройки Отображения с информацией об установленных параметрах шрифта
Эта страница отображается с использованием выбранного вами начертания и базового размера шрифта и
подтверждает изменения параметров шрифта.
Отображение изменений
Уже становится интереснее!
Если вы до сих пор не закрыли ваш Web-браузер и находитесь на странице, отображающей подтверждение
первоначальных установок, то щелкните мышью на ссылке для изменения ваших настроек. В рабочее окно
браузера будет загружена страница Мои Настройки Отображения с формой для изменения настроек и
установленными настройками (Рис. 13.7).
Рис. 13.7. Страница Мои Настройки Отображения с установленными настройками
В группе переключателей Выберите Шрифт установите переключатель Courier.
В группе переключателей Выберите базовый размер шрифта установите переключатель 8 pt.
Нажмите кнопку Установить. В рабочее окно браузера будет загружена страница
Мои Настройки Отображения с подтверждением выбранных настроек (Рис. 13.8).
Рис. 17.8. Страница Мои Настройки Отображения
с подтверждением выбранных настроек
Как вы можете видеть, изображение текста на странице изменяется в соответствии с установленными вами
настройками шрифта.
Щелкните мышью на ссылке для изменения ваших настроек. В рабочее окно браузера будет загружена
страница Мои Настройки Отображения с формой для изменения настроек (Рис. 13.9).
Рис. 13.9. Страница Мои Настройки Отображения
с выбранными настройками шрифта
В группе переключателей Выберите Шрифт установите переключатель Wingdings.
В группе переключателей Выберите базовый размер шрифта установите переключатель 14 pt.
Нажмите кнопку Установить. В рабочее окно браузера будет загружена страницa Мои Настройки
Отображения с подтверждением новых настроек (Рис. 13.10).
Рис. 13.10. Страница Мои Настройки Отображения с шрифтом Wingdings
Если вы закроете свой Web-браузер, то сессия будет прервана и при новом запуске браузера и загрузке
страницы session01.php параметры шрифта будут выбраны по умолчанию. |