Полный цикл в digital

Session

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

Для запуска сессии необходимо вызвать функцию session_start(). Она должна вызываться до отправки ответа пользователю:

<?
session_start();

При запуске сессии с помощью функции session_start(), если пользователь первый раз заходит на сайт, PHP назначает ему уникальный идентификатор сессии. Запустите браузер и откройте в нём Developer Tools и посмотрите на заголовки которые нам прислал сервер. Там будет много чего, интересует нас только подобная строчка в ответе сервера:

Set-Cookie: PHPSESSID=dap83arr6r3b56e0q7t5i0qf91;

С помощью этого идентификатора пользователь ассоциируется с данными сессии. Если для пользователя уже установлена сессия, то данная функция продлевает текущую сессию вместо установки новой.

PHPSESSID имя сессии по умолчанию, регулируется из конфига php.ini директивой session.name, при необходимости имя можно изменить в самом конфигурационном файле или с помощью функции session_name().

С помощью специальных функций мы можем получить идентификатор сессии:

<?
session_start();
echo session_id(); // идентификатор сессии
echo session_name(); // имя - PHPSESSID

То же значение мы могли бы получить, обратившись к cookie напрямую:

<?
echo $_COOKIE["PHPSESSID"];

Затем для сохранения или получения данных в сессии надо использовать глобальный ассоциативный массив $_SESSION. Сохранение переменной в сессии:

<?
$_SESSION["имя_переменной"] = значение;

Получение сохраненного значения:

<?
$переменная = $_SESSION["имя_переменной"];

Сохранение данных в сессии

Запустим сессию и сохраним в ней значения:

<?
session_start(); 
$_SESSION["name"]="Sam"; 
$_SESSION["age"]=41; 
echo "Данные сохранены в сессии";

После установки сессии в браузере мы сможем заметить установку специальной куки, которая по умолчанию называется PHPSESSID

Получение данных сессии

Теперь получим эти значения и выведем на страницу:

<?
session_start();
if (isset($_SESSION["name"]) && isset($_SESSION["age"])) {
$name = $_SESSION["name"];
$age = $_SESSION["age"];
echo "Name: $name <br> Age: $age";
}

Удаление данных сессии

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

Для удаления одной переменной из сессии применяется функция unset():

<?
session_start();
unset($_SESSION["age"]); // удаляем из сессии переменную "age"

Удалить все данные сессии можно с помощью функции session_destroy():

<?
session_start();
session_destroy();

Где хранятся ссесии

По умолчанию PHP хранит сессию в файлах, за это отвечает директива session.save_handler, путь по которому сохраняются файлы ищите в директиве session.save_path, либо воспользуйтесь функцией session_save_path() для получения необходимого пути.

В конфигурации путь к файлам может быть не указан, тогда файлы сессии будут хранится во временных файлах системы, вызовите функцию sys_get_temp_dir() и узнайте где это потаённое место. Идём по данному пути и находим ваш файл сессии по ID.

Для преобразования этой строки в массив нужно воспользоваться функцией session_decode(), для обратного преобразования session_encode(). Можно использовать и стандартную PHP сериализацию, пропишите в конфигурационной директиве session.serialize_handler значение php_serialize после этого $_SESSION можно будет использовать без ограничений - в качестве индекса теперь можно использовать цифры и специальные символы в имени.

Безопасность

Давайте запустим два браузера, в одно установим ссесию в в другой добавим тот же самый ID. Для этого есть простенький javascript код, скопируйте его в консоль браузера и запустите, только не забудьте идентификатор сессии поменять на свой:

javascript:(function(){document.cookie='PHPSESSID=dap83arr6r3b56e0q7t5i0qf91;path=/;';window.location.reload();})()

Вот теперь у вас оба браузера смотрят на одну и туже сессию.

Стоит упомянуть директиву session.cookie-httponly, благодаря ей сессионная кука будет недоступна из JavaScript.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг