Существуют два метода регистрации сеансовой переменной. Первый — воспользоваться функцией session_register (). Синтаксис этой функции имеет вид:
session_register($var_name [, $next_varname [, ...]])
Параметр $var_name (как и другие дополнительные параметры) является строкой (или массивом строк), представляющей переменную для сохранения в сеансе. Эта функция возвращает true, если все используемые переменные были успешно сохранены, и false в противном случае.
Поскольку функция session_register () начинает сеанс, даже если он еще не существует, имейте в виду, что все вызовы session_register () должны быть завершены до того, как будут посланы какие-нибудь данные в браузер. Таким образом, несмотря на то, что можно начать сеанс с помощью этой функции, лучше делать это вручную с помощью функции session_start (). При работе с сеансовыми переменными нужно учитывать несколько обстоятельств. Одна из наиболее общих ошибок при работе с PHP-сеансами — считать, что параметры, переданные в сеанс, являются актуальными переменными, предназначенными для сохранения. Функция s e s s i o n r e g i s t e r ()
принимает только строки, представляющие имена переменных для сохранения в се-
ансе. Сказанное хорошо демонстрируется в листинге 6.7.
Листинг 6.7. Использование функции session_register ()
$myvar = "Моя переменная для сохранения в сеансе"; $myvar_name = "myvar"; session_register($myvar_name); ?>
Когда этот код выполнится, что сохранится в сеансе? Обратите внимание, что зарегистрирована будет переменная $myvar, а не $myvar_name. Если это обстоятельство вас смущает, объяснения будут чуть позже. Было создано две переменных: $myvar —текущее значение, которое хотелось бы сохранить в сеансе, и $myvar_name. Когда session_register () выполнится, РНР попытается сохранить в сеансе переменную, имя которой хранится в переменной $myvar_name (а не саму переменную $myvar_name). Так как эта переменная имеет значение myvar, в сеансе будет сохранена переменная $myvar. Для тех, кто не использует функцию session_register () (или не может использовать, если директива register_globals отключена), в РНР определен суперглобальный массив $_SESSION. В течение любого сеанса можно использовать переменную $_SESSION точно так же, как функцию session_register (). Например, если требуется сохранить в сеансе содержимое $myvar из предыдущего примера, используя суперглобальный метод, поступите следующим образом: $_SESSION [ ''myvar'] = $myvar;
При использовании такого метода работы с сеансовыми переменными нет необходимости вызывать функцию session_register (). В отличие от метода с функцией session_register (), при сохранении переменной в суперглобальном массиве $_SESSION сеанс автоматически не создается. Поэтому важно явно начать сеанс, перед тем как работать с $_SESSION.
|