Основы использования сеансов

В этом разделе обсуждаются основы регистрации, отмены регистрации и работы с сеансовыми переменными в РНР. Важно заметить, что манипулирование сеансовыми переменными с помощью представленных здесь функций, таких как session_register(), session_unregister() и session_is_registered(), возможно только при активной директиве register_globals. Если эта директива не активна {что рекомендуется), то всеми сеансовыми переменными нужно манипулировать с использованием суперглобального массива $_SESSION.
Запуск сеанса
В РНР существует три основных способа создания сеанса. Первый метод заключается в прямом указании РНР начать сеанс, используя функцию session_start (), Эта функция не принимает параметров и не возвращает значения. Когда эта функция вызывается, все переменные, ассоциированные с этим сеансом, реконструируются. Второй подход заключается в вызове функции session_readonly(), используемой вместо session_start () . В данном случае все сеансовые переменные создаются заново; при этом любые изменения переменных по окончании выполнения сценария не сохраняются.
НА ЗАМЕТКУ -
В РНР сеансы работают с переменными внутри глобальной области. Это означает, что для регистрации переменной в функции, эта переменная должна быть объявлена как глобальная с помощью оператора global. Более того, РНР реконструирует переменные только внутри глобальной области.
Как уже было сказано, в РНР доступны три способа запуска сеанса внутри РНР-сценария. Третий способ предусматривает регистрацию переменной с помощью функции session_register{).
Регистрация сеансовых переменных
Существуют два метода регистрации сеансовой переменной. Первый — воспользоваться функцией session_register (). Синтаксис этой функции имеет вид:
session_register($var_name [, $next_varname [, ...]])
Параметр $var_name (как и другие дополнительные параметры) является строкой (или массивом строк), представляющей переменную для сохранения в сеансе. Эта функция возвращает true, если все используемые переменные были успешно сохранены, и false в противном случае.
Поскольку функция session_register() начинает сеанс, даже если он еще не существует, имейте в виду, что все вызовы session_register () должны быть завершены до того, как будут посланы какие-нибудь данные в браузер. Таким образом, несмотря на то, что можно начать сеанс с помощью этой функции, лучше делать это вручную с помощью функции session_start (). При работе с сеансовыми переменными нужно учитывать несколько обстоятельств. Одна из наиболее общих ошибок при работе с PHP-сеансами — считать, что параметры, переданные в сеанс, являются актуальнымипеременными, предназначенными для сохранения. Функция session_register() принимает только строки, представляющие имена переменных для сохранения в сеансе. Сказанное хорошо демонстрируется в листинге 6.7.
Листинг 6.7. Использование функции session^register ()

Smyvar = "Моя переменная для сохранения в сеансе"; $myvar_name ■ "myvar"; session_register($myvar_name);

Когда этот код выполнится, что сохранится в сеансе? Обратите внимание, что зарегистрирована будет переменная Smyvar, а не Smyvarname. Если это обстоятельство вас смущает, объяснения будут чуть позже. Было создано две переменных: Smyvar — текущее значение, которое хотелось бы сохранить в сеансе, и Smyvar_name. Когда session_register{) выполнится, РНР попытается сохранить в сеансе переменную, имя которой хранится в переменной Smyvar_name (а не саму переменную Smyvar^name). Так как эта переменная имеет значение myvar, в сеансе будет сохранена переменная Smyvar. Для тех, кто не использует функцию session_register() (или не может использовать, если директива register_globals отключена), в РНР определен суперглобальпый массив SSESSION. В течение любого сеанса можно использовать переменную S_SESSION точно так же, как функцию session_register [). Например, если требуется сохранить в сеансе содержимое Smyvar из предыдущего примера, используя суперглобальный метод, поступите следующим образом:
S_SESSION[ ''myvar" ] = Smyvar;
При использовании такого метода работы с сеансовыми переменными нет необходимости вызывать функцию session^register(). В отличие от метода с функцией sessiori_register (), при сохранении переменной в суперглобальном массиве SSESSION сеанс автоматически не создается. Поэтому важно явно начать сеанс, перед тем как работать с $_SESSION.

Tags: , ,

Related posts


Leave a Reply