Session register php global

Работа с сессиями в PHP

Сессия, механизм php, созданный для возможности передачи данных предназначенных конкретному пользователю при повторных запросах (веб-сервер не поддерживает постоянного соединения с клиентом, и каждый запрос обрабатывается, как новый, без какой-либо связи с предыдущими).

Принцип работы сессий: сервер выдает браузеру уникальный идентификатор, и просит передавать его с каждым запросом. Передача происходит стандартными способами, либо через куки, либо через переменные POST/GET.

Идентификатор сессии — это обычная переменная, по умолчанию ее имя — PHPSESSID. Можно изменить директивой session.name в php.ini.

На сервере за передачу информации о сессиях отвечают две настройки в php.ini:

  • session.use_cookies — если равно 1, то PHP передает идентификатор в куках, если 0 — то нет.
  • session.use_trans_sid — если равно 1, то PHP передает его, добавляя к URL и формам, если 0 — то нет.

Соответственно, если включена только первая настройка и браузер отдает куки, то идентификатор передается через них, если не отдает, то сессия обнуляется при каждом запросе.

Если включена только вторая, то PHP дописывает к каждой относительной ссылке и к каждой форме передачу идентификатора сессии, примерно так:

Если включены обе, то браузеру выставляется кука, а ссылки и формы дополняются только если кука найдена не была.

Вся информация о сессии храниться в глобальном массиве $_SESSION.

Запись данных в сессию работает так:

// запускаем новую, либо возобновляем существующую сессию session_start(); // передаем в массив сессий переменную с названием test и данными Hello world $_SESSION['test']='Hello world!'; // если в качестве имени переменной хотим использовать значение переменной - // пишем без кавычек или используем двойные $var = name; $_SESSION["$var"]='Hello world!';
// обычное условие проверки if(!$_SESSION[$var]){ echo "session variable is empty" } // можно получить id текущей сессии или ее имя session_id(); session_name(); 

Удаление переменных из сессии:

unset($_SESSION[$var]); // Если register_globals = on, надо добавить строку session_unregister($var); //Если надо сбросить все переменные сессии session_unset();

Для закрытия сессии используется функция:

Данные из глобального массива $_SESSION php хранит либо в файлах, путь к которым указывается в session.save_path в php.ini, либо в БД.

Для управления HTTP-заголовками отвечающими за кэш, используется функция session_cache_limiter(). Установка nocache, например, отменяет кэширование на стороне клиента.

Во время начала запроса режим кеширования сбрасывается до значения по умолчанию, хранящегося в session.cache_limiter. Таким образом, вам необходимо вызывать session_cache_limiter() для каждого запроса (перед тем, как вызвана функция session_start()).

Значение Посылаемый заголовок
public Expires: (когда-нибудь в будущем, в зависимости от session.cache_expire)
Cache-Control: public, max-age=(когда-нибудь в будущем, в зависимости от session.cache_expire)
Last-Modified: (временная метка последнего сохранения сессии)
private_no_expire Cache-Control: private, max-age=(session.cache_expire в будущем), pre-check=(session.cache_expire в будущем)
Last-Modified: (временная метка последнего сохранения сессии)
private Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private, max-age=(session.cache_expire в будущем), pre-check=(session.cache_expire в будущем)
Last-Modified: (временная метка последнего сохранения сессии)
nocache Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

Возможные проблемы

  • Вспомогательными вещами, вроде кодирования данных и удаления старых сессий, php занимается сам, и если возникает проблема с удалением информации о них, проверьте в php.ini строку session.gc_probability. Для того чтобы php мог самостоятельно удалять файлы сессий, должно быть установлено 1.
  • Warning: open(/tmp\sess_SID, O_RDWR) failed: No such file or directory (2) in full_script_path on line number
    или
    Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp))
    в этом случае надо в php.ini, в параметре session.save_path, указать правильный каталог, который существует и доступен для записи (не забудьте перезагрузить апач).
  • Warning: Cannot send session cookie — headers already sent.
    Warning: Cannot send session cache limiter — headers already sent.
    Warning: Cannot add header information — headers already sent.
    эти ошибки возникают в том случае, если браузер ранее уже получил заголовки для страницы. Функции header(), session_start(), setcookie() и вся логика, которая их вызывает, должны обрабатываться до любого вывода в браузер.
  • Если давать переменным скрипта имена, совпадающие с индексами массива $_SESSION, возможны проблемы. При register_globals=on значения будут перезаписывать друг друга. При register_globals=off, в случае, если в скрипте есть переменная сессии не имеющая значения, и глобальная переменная с тем же именем, появится ошибка «Your script possibly relies on a session side-effect which existed until PHP 4.2.3.». Для предотвращения этой ошибки, надо инициализировать переменные перед использованием или проверять на существование, и стараться не давать глобальным переменным имена, совпадающие с индексами массива $_SESSION.
  • Если вы используете перенаправление через header или навигацию с помощью JavaScript, PHP не пропишет необходимый идентификатор, т.к. он работает только со статичными ссылками. В этом случае надо проставлять идентификатор самостоятельно:
header("Location: /script.php?".session_name().'='.session_id());

Более детальный обзор можно найти на сайте phpfaq.ru

Источник

session_register

session_register() принимает переменное число аргументов, любой из которых может быть либо строкой, содержащей имя переменной, либо массивом, состоящим из имен переменных или других массивов. Для каждого имени, session_register() регистрирует глобальную переменную с таким именем в текущей сессии.

Вы также можете создать переменную сессии, просто установив соответствующий элемент в массиве $_SESSION .

// Использование session_register() объявлено устаревшим
$barney = «Большой фиолетовый динозавр.» ;
session_register ( «barney» );

// Использование $_SESSION является предпочтительным
$_SESSION [ «zim» ] = «Захватчик с другой планеты.» ;
?>

Если функция session_start() не была вызвана перед этой, то произойдет неявный вызов session_start() без параметров. В случае использования $_SESSION этого не произойдет, следовательно необходимо самостоятельно вызвать session_start() .

Данная функция была объявлена УСТАРЕВШЕЙ, начиная с PHP 5.3.0 и была УДАЛЕНА в PHP 5.4.0.

Список параметров

Строка, содержащая имя переменной, либо массив, состоящий из имен переменных или других массивов.

Возвращаемые значения

Возвращает true в случае успешного завершения или false в случае возникновения ошибки.

Примечания

Если вы хотите, чтобы ваш скрипт работал независимо от register_globals, вам нужно использовать массив $_SESSION , так как записи $_SESSION будут автоматически зарегистрированы. Если ваш скрипт использует session_register() , она не будет работать в условиях, когда директива PHP register_globals отключена.

Замечание: register_globals: важное замечание

Начиная с PHP 4.2.0, значением директивы PHP register_globals по умолчанию является off (выключено). Сообщество PHP рекомендует не полагаться на эту директиву, а использовать вместо этого иные средства, такие как superglobals.

Эта функция регистрирует глобальную переменную. Если вы хотите зарегистрировать сессионную переменную изнутри функции, вы должны сделать эту переменную глобальной с помощью ключевого слова global или с помощью суперглобального массива $GLOBALS[] , или использовать специальные сессионные массивы, указанные ниже.

Если вы используете $_SESSION , не используйте session_register() , session_is_registered() , и session_unregister() .

Замечание:

Это в настоящее время невозможно зарегистрировать в сессии переменнтую типа resource . Например, вы не можете создать подключение к базе данных, хранить идентификатор соединения как переменную сессии и ожидать подключения к БД по этому идентификатору после восстановления сессии. Функции PHP, которые возвращают ресурсы, имеют в описании тип возвращаемого значения resource . Список таких функций можно посмотреть в приложении типы ресурсов.

Если используются $_SESSION , присваитвайте значения $_SESSION . Пример: $_SESSION[‘var’] = ‘ABC’;

Смотрите также

  • session_is_registered() — Определяет, зарегистрирована ли глобальная переменная в сессии
  • session_unregister() — Отмена регистрации глобальной переменной в текущей сессии
  • $_SESSION

Источник

session_register

session_register() accepts a variable number of arguments, any of which can be either a string holding the name of a variable or an array consisting of variable names or other arrays. For each name, session_register() registers the global variable with that name in the current session.

You can also create a session variable by simply setting the appropriate member of the $_SESSION or $HTTP_SESSION_VARS (PHP < 4.1.0) array.

// Use of session_register() is deprecated
$barney = «A big purple dinosaur.» ;
session_register ( «barney» );

// Use of $_SESSION is preferred, as of PHP 4.1.0
$_SESSION [ «zim» ] = «An invader from another planet.» ;

// The old way was to use $HTTP_SESSION_VARS
$HTTP_SESSION_VARS [ «spongebob» ] = «He’s got square pants.» ;
?>

If session_start() was not called before this function is called, an implicit call to session_start() with no parameters will be made. $_SESSION does not mimic this behavior and requires session_start() before use.

Данная функция была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0.

Список параметров

A string holding the name of a variable or an array consisting of variable names or other arrays.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примечания

If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register() , it will not work in environments where the PHP directive register_globals is disabled.

Замечание: register_globals: важное замечание

Начиная с PHP 4.2.0, значением директивы PHP register_globals по умолчанию является off (выключено). Сообщество PHP рекомендует не полагаться на эту директиву, а использовать вместо этого иные средства, такие как superglobals.

This registers a global variable. If you want to register a session variable from within a function, you need to make sure to make it global using the global keyword or the $GLOBALS[] array, or use the special session arrays as noted below.

If you are using $_SESSION (or $HTTP_SESSION_VARS ), do not use session_register() , session_is_registered() , and session_unregister() .

Замечание:

It is currently impossible to register resource variables in a session. For example, you cannot create a connection to a database and store the connection id as a session variable and expect the connection to still be valid the next time the session is restored. PHP functions that return a resource are identified by having a return type of resource in their function definition. A list of functions that return resources are available in the resource types appendix.

If $_SESSION (or $HTTP_SESSION_VARS for PHP 4.0.6 or less) is used, assign values to $_SESSION . For example: $_SESSION[‘var’] = ‘ABC’;

Смотрите также

  • session_is_registered() — Определяет, зарегистрирована ли глобальная переменная в сессии
  • session_unregister() — Unregister a global variable from the current session
  • $_SESSION

Источник

Читайте также:  Php посчитать количество выведенных элементов
Оцените статью