HTML Diff
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>