0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>Сессия</strong>- это абстракция, созданная для удобной работы с индивидуальными пользователями. Она используется для идентификации пользователей и позволяет отличать их друг от друга. Например, аутентификация на сайтах построена поверх механизма сессии.</p>
1
<p><strong>Сессия</strong>- это абстракция, созданная для удобной работы с индивидуальными пользователями. Она используется для идентификации пользователей и позволяет отличать их друг от друга. Например, аутентификация на сайтах построена поверх механизма сессии.</p>
2
<p>Сессии реализуются на уровне конкретных фреймворков и только в PHP сессии встроены в язык. Общий принцип работы сессии сводится к трем операциям:</p>
2
<p>Сессии реализуются на уровне конкретных фреймворков и только в PHP сессии встроены в язык. Общий принцип работы сессии сводится к трем операциям:</p>
3
<ul><li>Старт сессии. Так мы говорим системе, что хотим начать следить за пользователем. Во многих фреймворках эта операция выполняется неявно при попытке чтения или записи в сессию</li>
3
<ul><li>Старт сессии. Так мы говорим системе, что хотим начать следить за пользователем. Во многих фреймворках эта операция выполняется неявно при попытке чтения или записи в сессию</li>
4
<li>Запись данных в сессию</li>
4
<li>Запись данных в сессию</li>
5
<li>Чтение данных из сессии</li>
5
<li>Чтение данных из сессии</li>
6
</ul><p>Set-Cookie: _hexlet_session=CM5DvfXch6M3uPJHyfLDpv52wBe4iu3og domain=.hexlet.io; path=/; expires=Sun, 12 Aug 2018 12:56:51 -0000; secure; HttpOnly</p>
6
</ul><p>Set-Cookie: _hexlet_session=CM5DvfXch6M3uPJHyfLDpv52wBe4iu3og domain=.hexlet.io; path=/; expires=Sun, 12 Aug 2018 12:56:51 -0000; secure; HttpOnly</p>
7
<p>Старт сессии на техническом уровне означает установку специальной куки в браузер. Обычно эта кука содержит идентификатор сессии, который уникален для каждого пользователя.</p>
7
<p>Старт сессии на техническом уровне означает установку специальной куки в браузер. Обычно эта кука содержит идентификатор сессии, который уникален для каждого пользователя.</p>
8
<p>Данные сессии могут храниться где угодно. Это зависит от конкретной реализации. В этом одно из ключевых отличий работы с пользователями напрямую через куки или через сессию.</p>
8
<p>Данные сессии могут храниться где угодно. Это зависит от конкретной реализации. В этом одно из ключевых отличий работы с пользователями напрямую через куки или через сессию.</p>
9
<p>Сессия - более высокоуровневая абстракция. Например, в PHP по умолчанию данные сессии хранятся в файлах. Из этого следует сразу два вывода:</p>
9
<p>Сессия - более высокоуровневая абстракция. Например, в PHP по умолчанию данные сессии хранятся в файлах. Из этого следует сразу два вывода:</p>
10
<ul><li>Сессия ограничена только физическим пространством дисков</li>
10
<ul><li>Сессия ограничена только физическим пространством дисков</li>
11
<li>Данные хранятся на сервере, что безопаснее</li>
11
<li>Данные хранятся на сервере, что безопаснее</li>
12
</ul><p>Если этого недостаточно, например, серверов больше чем один, то буквально парой строк кода в конфигурации можно изменить тип хранилища с файлов на базу данных.</p>
12
</ul><p>Если этого недостаточно, например, серверов больше чем один, то буквально парой строк кода в конфигурации можно изменить тип хранилища с файлов на базу данных.</p>
13
<p>Также при работе с сессией не надо думать про имена кук, про сериализацию и десериализацию составных данных. Это происходит автоматически.</p>
13
<p>Также при работе с сессией не надо думать про имена кук, про сериализацию и десериализацию составных данных. Это происходит автоматически.</p>
14
<p>Этот простой скрипт демонстрирует работу сессий в PHP. В отличие от остальных суперглобальных массивов для работы с HTTP массив $_SESSION - изменяемый. Всё, что добавится в него, автоматически попадает в сессию и сохраняется между запросами до тех пор, пока кука не удалится или не изменится.</p>
14
<p>Этот простой скрипт демонстрирует работу сессий в PHP. В отличие от остальных суперглобальных массивов для работы с HTTP массив $_SESSION - изменяемый. Всё, что добавится в него, автоматически попадает в сессию и сохраняется между запросами до тех пор, пока кука не удалится или не изменится.</p>
15
<p>Из примера выше видно, что сессия упрощает работу с пользователем. Также значением массива $_SESSION может быть любая составная структура, массив или объект. Механизм сессий автоматически беспокоится о сериализации и десереализации.</p>
15
<p>Из примера выше видно, что сессия упрощает работу с пользователем. Также значением массива $_SESSION может быть любая составная структура, массив или объект. Механизм сессий автоматически беспокоится о сериализации и десереализации.</p>
16
<p>Внутри Slim нет особенного механизма для работы с сессиями, так как они не являются частью стандарта PSR-7. Работа с сессией происходит напрямую.</p>
16
<p>Внутри Slim нет особенного механизма для работы с сессиями, так как они не являются частью стандарта PSR-7. Работа с сессией происходит напрямую.</p>
17
<p>Перепишем наш пример добавления товаров в корзину, используя сессию:</p>
17
<p>Перепишем наш пример добавления товаров в корзину, используя сессию:</p>
18
<p>По сравнению с версией на куках ушла значительная часть кода. Кодирование и декодирование в JSON, извлечение куки и перезапись куки.</p>
18
<p>По сравнению с версией на куках ушла значительная часть кода. Кодирование и декодирование в JSON, извлечение куки и перезапись куки.</p>
19
<p>Иногда возникает задача уничтожать сессию, например, при выполнении выхода из системы. Полное уничтожение сессии включает в себя три шага:</p>
19
<p>Иногда возникает задача уничтожать сессию, например, при выполнении выхода из системы. Полное уничтожение сессии включает в себя три шага:</p>
20
<ul><li>Обновление куки с установкой даты в прошлое</li>
20
<ul><li>Обновление куки с установкой даты в прошлое</li>
21
<li>Обнуление массива $_SESSION - $_SESSION = []</li>
21
<li>Обнуление массива $_SESSION - $_SESSION = []</li>
22
<li>Обнуление хранилища сессий - session_destroy()</li>
22
<li>Обнуление хранилища сессий - session_destroy()</li>
23
</ul><p>Только в этом случае сессия уничтожится полностью. Первый шаг можно не делать, но второй и третий - желательно.</p>
23
</ul><p>Только в этом случае сессия уничтожится полностью. Первый шаг можно не делать, но второй и третий - желательно.</p>
24
<p>У сессий в PHP много тонкостей и механизмов для управления ими. Если интересно разобраться в том, как устроена ее работа, рекомендуем читать официальную документацию.</p>
24
<p>У сессий в PHP много тонкостей и механизмов для управления ими. Если интересно разобраться в том, как устроена ее работа, рекомендуем читать официальную документацию.</p>