Где хранится сессия php
Сессии являются простым способом хранения информации для отдельных пользователей с уникальным идентификатором сессии. Это может использоваться для сохранения состояния между запросами страниц. Идентификаторы сессий обычно отправляются браузеру через сессионный cookie и используются для получения имеющихся данных сессии. Отсутствие идентификатора сессии или сессионного cookie сообщает PHP о том, что необходимо создать новую сессию и сгенерировать новый идентификатор сессии.
Сессии используют простую технологию. Когда сессия создана, PHP будет либо получать существующую сессию, используя переданный идентификатор (обычно из сессионного cookie) или, если ничего не передавалось, будет создана новая сессия. PHP заполнит суперглобальную переменную $_SESSION сессионной информацией после того, как будет запущена сессия. Когда PHP завершает работу, он автоматически сериализует содержимое суперглобальной переменной $_SESSION и отправит для сохранения, используя сессионный обработчик для записи сессии.
По умолчанию PHP использует внутренний обработчик files для сохранения сессий, который установлен в INI-переменной session.save_handler. Этот обработчик сохраняет данные на сервере в директории, указанной в конфигурационной директиве session.save_path.
Сессии могут запускаться вручную с помощью функции session_start() . Если директива session.auto_start установлена в 1 , сессия автоматически запустится, в начале запроса.
Сессия обычно завершает свою работу, когда PHP заканчивает исполнять скрипт, но может быть завершена и вручную с помощью функции session_write_close() .
Пример #1 Регистрация переменной с помощью $_SESSION .
session_start ();
if (!isset( $_SESSION [ ‘count’ ])) $_SESSION [ ‘count’ ] = 0 ;
> else $_SESSION [ ‘count’ ]++;
>
?>?php
Пример #2 Отмена объявления переменной с помощью $_SESSION .
session_start ();
unset( $_SESSION [ ‘count’ ]);
?>?php
Предостережение
НЕ ОЧИЩАЙТЕ $_SESSION целиком, используя unset($_SESSION) , так как это отключит возможность регистрации сессионных переменных через суперглобальную переменную $_SESSION .
Внимание
Вы не можете использовать ссылки в сессионных переменных, так как не существует реального способа восстановления ссылки к другой переменной.
Замечание:
Сессии, использующие файлы (по умолчанию в PHP), блокируют файл сессии сразу при открытии сессии функцией session_start() или косвенно при указании session.auto_start. После блокировки, ни один другой скрипт не может получить доступ к этому же файлу сессии, пока он не будет закрыт или при завершении скрипта или при вызове функции session_write_close() .
Скорее всего это станет проблемой для сайтов, которые активно используют AJAX и делают несколько одновременных запросов. Простейшим путём решить эту проблему будет вызов функции session_write_close() сразу же как только все требуемые изменения в сессии будут сделаны, предпочтительно ближе к началу работы скрипта. Также можно использовать другой механизм сессии, который поддерживает конкурентный доступ.
User Contributed Notes
There are no user contributed notes for this page.
- Примеры
- Основы использования
- Передача идентификатора сессии
- Пользовательские обработчики сессии
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Где хранится сессия php
Сессии представляют набор переменных, которые хранятся на сервере (либо часть на сервере, а часть — в cookie браузера) и которые относятся только к текущему пользователю. В какой-то степени сессии являются альтернативой кукам в плане сохранения данных о пользователе.
Для запуска сессии необходимо вызвать функцию session_start() . Она должна вызываться до отправки ответа пользователю:
При запуске сессии с помощью функции session_start() , если пользователь первый раз заходит на сайт, PHP назначает ему уникальный идентификатор сессии. Этот идентификатор с помощью cookie, которые по умолчанию называются «PHPSESSID», сохраняется в браузере пользователя. С помощью этого идентификатора пользователь ассоциируется с данными сессии. Если для пользователя уже установлена сессия, то данная функция продлевает текущую сессию вместо установки новой.
С помощью специальных функций мы можем получить идентификатор сессии:
session_start(); echo session_id(); // идентификатор сессии echo session_name(); // имя - PHPSESSID
То же значение мы могли бы получить, обратившись к cookie напрямую:
echo $_COOKIE["PHPSESSID"];
Затем для сохранения или получения данных в сессии надо использовать глобальный ассоциативный массив $_SESSION . Сохранение переменной в сессии:
$_SESSION["имя_переменной"] = значение;
Получение сохраненного значения:
$переменная = $_SESSION["имя_переменной"];
Сохранение данных в сессии
Запустим сессию и сохраним в ней значения:
После установки сессии в браузере мы сможем заметить установку специальной куки, которая по умолчанию называется «PHPSESSID»:
SESSION» />SESSION» />
Получение данных сессии
Теперь получим эти значения и выведем на страницу:
session_start(); if (isset($_SESSION["name"]) && isset($_SESSION["age"])) < $name = $_SESSION["name"]; $age = $_SESSION["age"]; echo "Name: $name
Age: $age"; >Удаление данных сессии
Сессия уничтожается с закрытием браузера, однако мы также можем программно удалить либо какие-то отдельные, либо все данные сессии.
Для удаления одной переменной из сессии применяется функция unset() :
session_start(); unset($_SESSION["age"]); // удаляем из сессии переменную "age"
Удалить все данные сессии можно с помощью функции session_destroy() :
session_start(); session_destroy();
Введение
Поддержка сессий в PHP заключается в способе сохранения некоторых данных между несколькими последовательными доступами.
Каждому посетителю сайта присваивается уникальный идентификатор, называемый идентификатором сессии (session id). Он хранится либо в cookie на стороне пользователя, либо передаётся через URL.
Поддержка сессий позволяет сохранять данные между запросами в суперглобальном массиве $_SESSION . В тот момент, когда посетитель получает доступ к сайту, PHP проверяет автоматически (если session.auto_start установлено в 1) или по запросу (явным образом через вызов session_start() ), был ли определённый идентификатор сессии послан вместе с запросом. Если это так, восстанавливается сохранённое ранее окружение.
Предостережение
При включённом session.auto_start единственным способом помещения объектов в сессию останется загрузка описаний класса с помощью auto_prepend_file. В противном случае придётся выполнить сериализацию ( serialize() ) и десериализацию ( unserialize() ) объекта вручную.
$_SESSION (и все зарегистрированные переменные) сериализуются внутри PHP после выполнения запроса, используя обработчик сериализации, указанный в INI-опции session.serialize_handler. Зарегистрированные, но неопределённые переменные помечаются как неопределённые. При последующем доступе они не определяются сессионным модулем, если пользователь заново не определит их.
Внимание
Так как сессионные данные сериализуются, то переменные с типом resource не могут храниться в сессиях.
Обработчики сериализации ( php и php_binary ) наследуют ограничения для register_globals. Поэтому нельзя использовать числовые или строковые индексы содержащие специальные символы ( | и ! ). Их использование приведёт к ошибкам по завершении скрипта. У php_serialize такие ограничения отсутствуют.
Замечание:
При работе с сессиями обратите внимание, что запись в сессии не создаётся до тех пор, пока переменная не будет зарегистрирована в суперглобальном массиве $_SESSION . Это правило действует вне зависимости от того, была ли сессия запущена с использованием функции session_start() .
User Contributed Notes
There are no user contributed notes for this page.
- Сессии
- Введение
- Установка и настройка
- Предопределённые константы
- Примеры
- Отслеживание прогресса загрузки файлов с помощью сессий
- Безопасность сессий
- Функции для работы с сессиями
- SessionHandler
- SessionHandlerInterface
- SessionIdInterface
- SessionUpdateTimestampHandlerInterface
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
PHP. Сессии
Сессия создаёт файл во временном каталоге на сервере, в котором хранятся зарегистрированные переменные сессии и их значения. Эти данные будут доступны для всех страниц сайта во время этого посещения.
Расположение временного файла можно узнать через настройки в файле php.ini, который содержит параметр session.save_path. Как правило, папка имеет имя tmp.
При открытии сессии создаётся уникальный идентификатор для этой конкретной сессии, который представляет собой случайную строку из 32 шестнадцатеричных чисел.
Файл-куки PHPSESSID автоматически сохраняется на компьютере пользователя для хранения уникальной строки идентификации сессии.
На сервере в указанном временном каталоге автоматически создаётся файл, который содержит имя уникального идентификатора с префиксом sess_.
Когда PHP-скрипт хочет получить значение из переменной сессии, PHP автоматически получает уникальную строку идентификатора сессии из файла cookie PHPSESSID, а затем ищет во временном каталоге файл с этим именем и выполняет проверку путём сравнения обоих значений.
Сессия заканчивается, когда пользователь закрывает браузер или покидает сайт, сервер завершает сессию по истечении заданного периода времени, обычно 30 минут.
Открытие сессии
Сессия PHP открывается с помощью функции session_start(). Эта функция сначала проверяет открытые сессии, если ни одна сессия не открыта, запускает ее. Рекомендуется поместить вызов session_start() в начало страницы. Переменные сеанса хранятся в суперглобальном ассоциативном массиве $_SESSION[]. Доступ к этим переменным можно получить во время сессии.
Код для примера. Сначала откроем сессию, затем зарегистрируем переменную с именем visit, которая увеличивается каждый раз, когда страница посещается во время сеанса. Используйте функцию isset(), чтобы проверить, установлена ли уже переменная сессии или нет.
else < $_SESSION['visit'] = 1; >$msg = "Вы посещали эту страницу ". $_SESSION['visit']; $msg .= " в текущей сессии."; ?>Session Результат. Можете перезагрузить страницу, чтобы увидеть работу счётчика.
Вы посещали эту страницу 1 в текущей сессии.
Вы можете открыть страницу в другой вкладке, но счётчик «узнает» вас и будет увеличиваться. Вы можете закрыть все вкладки и через некоторое время открыть страницу снова. Счётчик по-прежнему работает и не сбрасывается.
Узнать идентификатор сессии можно через функцию session_id().
echo session_id();55d734fb0967e3d63175f46805d65890
Интересно, что через эту же функцию с одним аргументом, который принимает идентификатор сессии, можно заменить идентификатор, который генерирует система. Но в этом случае функцию следует использовать до session_start().
session_id(YOUR_SESSION_ID); session_start();Также можно сохранять не одно значение, а целый массив.
$cats = array("Барсик", "Мурзик", "Рыжик"); $_SESSION['cats'] = $cats;Выводим массив на страницу.
Барсик, Мурзик, Рыжик
Удаление сессии
Сессия может быть удалена с помощью функции session_destroy(). Через один вызов можно удалить все переменные сеанса. Если вы хотите удалить одну переменную сессии, вы можете использовать функцию unset(), чтобы отключить ее. Ниже приводится пример, в котором отменяется одна переменная:
Вызов, который удаляет все переменные сессии:
Включение автосессии
Вам не нужно вызывать функцию start_session(), чтобы открыть сессию, при посещении пользователем сайта, если вы установите переменную session.auto_start в файле php.ini.
Сессии без файлов cookie
Пользователь может запретить хранить файлы cookie на своем компьютере. Поэтому существует другой способ отправки идентификатора сеанса в браузер. Вы можете использовать константу SID, которая определяется, если сеанс запущен. Если клиент не отправил соответствующий сессии файл cookie, она выглядит как session_name = session_id. В противном случае она расширяется до пустой строки. Таким образом, вы можете вставлять ее в URL-адреса. В следующем примере показано как правильно регистрировать переменную и как правильно ссылаться на другую страницу с использованием SID.
else < $_SESSION['visit']++; >$msg = "Вы посещали эту страницу ". $_SESSION['visit']; $msg .= " в текущей сессии."; echo ( $msg ); ?>To continue click following link
">Этот код сформирует ссылку, на которую можно щёлкнуть.
Сессия между страницами
Данные запоминаются, нужно только извлекать нужные значения.
Привет, Васька
Нажмите на ссылку выше, чтобы увидеть, как работает сессия между страницами.
