HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Иногда куки не могут вместить в себя необходимые данные. Чтобы избежать этой проблемы, нужно использовать сессии. В этом уроке мы научимся работать с ними во Flask.</p>
1 <p>Иногда куки не могут вместить в себя необходимые данные. Чтобы избежать этой проблемы, нужно использовать сессии. В этом уроке мы научимся работать с ними во Flask.</p>
2 <h2>Три операции сессии</h2>
2 <h2>Три операции сессии</h2>
3 <p><strong>Сессия</strong>- это абстракция поверх механизма кук, которая создана, чтобы удобно работать с индивидуальными пользователями. Она используется, чтобы идентифицировать пользователей, и позволяет отличать их друг от друга. Например, аутентификация на сайтах построена поверх механизма сессии.</p>
3 <p><strong>Сессия</strong>- это абстракция поверх механизма кук, которая создана, чтобы удобно работать с индивидуальными пользователями. Она используется, чтобы идентифицировать пользователей, и позволяет отличать их друг от друга. Например, аутентификация на сайтах построена поверх механизма сессии.</p>
4 <p>Сессии реализуются на уровне конкретных фреймворков. Общий принцип работы сессии сводится к трём операциям:</p>
4 <p>Сессии реализуются на уровне конкретных фреймворков. Общий принцип работы сессии сводится к трём операциям:</p>
5 <ul><li>Старт сессии</li>
5 <ul><li>Старт сессии</li>
6 <li>Запись данных в сессию</li>
6 <li>Запись данных в сессию</li>
7 <li>Чтение данных из сессии</li>
7 <li>Чтение данных из сессии</li>
8 </ul><p>При старте сессии мы говорим системе, что хотим начать следить за пользователем. Во многих фреймворках эта операция выполняется неявно - при попытке чтения или записи в сессию.</p>
8 </ul><p>При старте сессии мы говорим системе, что хотим начать следить за пользователем. Во многих фреймворках эта операция выполняется неявно - при попытке чтения или записи в сессию.</p>
9 <h2>Преимущество сессии</h2>
9 <h2>Преимущество сессии</h2>
10 <p>Старт сессии на техническом уровне означает установку специальной куки в браузер. Обычно она содержит идентификатор сессии, который уникален для каждого пользователя. Данные сессии могут храниться где угодно, это зависит от конкретной реализации. В этом одно из ключевых отличий работы с пользователями напрямую через куки или через сессию.</p>
10 <p>Старт сессии на техническом уровне означает установку специальной куки в браузер. Обычно она содержит идентификатор сессии, который уникален для каждого пользователя. Данные сессии могут храниться где угодно, это зависит от конкретной реализации. В этом одно из ключевых отличий работы с пользователями напрямую через куки или через сессию.</p>
11 <p>Сессия более высокоуровневая абстракция. Например, во Flask по умолчанию данные сессии хранятся в браузере как куки, но подписаны криптографическим ключом. Чтобы хранить сессии на стороне сервера, существует несколько расширений Flask. Из этого следует сразу два вывода:</p>
11 <p>Сессия более высокоуровневая абстракция. Например, во Flask по умолчанию данные сессии хранятся в браузере как куки, но подписаны криптографическим ключом. Чтобы хранить сессии на стороне сервера, существует несколько расширений Flask. Из этого следует сразу два вывода:</p>
12 <ul><li>Сессия ограничена только физическим пространством дисков</li>
12 <ul><li>Сессия ограничена только физическим пространством дисков</li>
13 <li>Данные хранятся на сервере, что безопаснее</li>
13 <li>Данные хранятся на сервере, что безопаснее</li>
14 </ul><p>Если этого недостаточно, например, серверов больше чем один, то буквально парой строк кода в конфигурации можно изменить тип хранилища с файлов на базу данных.</p>
14 </ul><p>Если этого недостаточно, например, серверов больше чем один, то буквально парой строк кода в конфигурации можно изменить тип хранилища с файлов на базу данных.</p>
15 <p>Другое преимущество заключается в том, что при работе с сессией не надо думать про имена кук, про сериализацию и десериализацию составных данных. Всё это происходит автоматически.</p>
15 <p>Другое преимущество заключается в том, что при работе с сессией не надо думать про имена кук, про сериализацию и десериализацию составных данных. Всё это происходит автоматически.</p>
16 <p>Рассмотрим следующий код, который показывает работу сессий во Flask:</p>
16 <p>Рассмотрим следующий код, который показывает работу сессий во Flask:</p>
17 <p>Этот простой скрипт демонстрирует работу сессий во Flask. Сессия в Flask представлена объектом похожим по поведению на обычный словарь. В отличие от остальных глобальных объектов для работы с HTTP, объект session изменяемый, мы можем работать с ним используя стандартные подходы для словарей.</p>
17 <p>Этот простой скрипт демонстрирует работу сессий во Flask. Сессия в Flask представлена объектом похожим по поведению на обычный словарь. В отличие от остальных глобальных объектов для работы с HTTP, объект session изменяемый, мы можем работать с ним используя стандартные подходы для словарей.</p>
18 <p>Всё, что добавится в него, автоматически попадает в сессию и сохраняется между запросами. Это происходит до тех пор, пока кука не будет удалена или изменена.</p>
18 <p>Всё, что добавится в него, автоматически попадает в сессию и сохраняется между запросами. Это происходит до тех пор, пока кука не будет удалена или изменена.</p>
19 <p>Даже из этого простого примера видно, что сессия упрощает работу с пользователем. Кроме того, значением объекта session может быть любая составная структура, список, кортеж, словарь или объект. Механизм сессий автоматически беспокоится о сериализации и десериализации.</p>
19 <p>Даже из этого простого примера видно, что сессия упрощает работу с пользователем. Кроме того, значением объекта session может быть любая составная структура, список, кортеж, словарь или объект. Механизм сессий автоматически беспокоится о сериализации и десериализации.</p>
20 <h2>Замена куки на сессии</h2>
20 <h2>Замена куки на сессии</h2>
21 <p>Перепишем наш пример добавления товаров в корзину и используем для этого сессию:</p>
21 <p>Перепишем наш пример добавления товаров в корзину и используем для этого сессию:</p>
22 <p>После замены куки на сессию ушла значительная часть кода: кодирование и декодирование в JSON, извлечение куки, перезапись куки.</p>
22 <p>После замены куки на сессию ушла значительная часть кода: кодирование и декодирование в JSON, извлечение куки, перезапись куки.</p>
23 <p>Иногда возникает задача уничтожать сессию, например, когда выполняется выход из системы. Полное уничтожение сессии выполняется за два шага:</p>
23 <p>Иногда возникает задача уничтожать сессию, например, когда выполняется выход из системы. Полное уничтожение сессии выполняется за два шага:</p>
24 <ol><li>Обновление куки с установкой даты в прошлое</li>
24 <ol><li>Обновление куки с установкой даты в прошлое</li>
25 <li>Обнуление хранилища сессии и очищение объекта session.clear()</li>
25 <li>Обнуление хранилища сессии и очищение объекта session.clear()</li>
26 </ol><p>Только в этом случае сессия уничтожится полностью. Первый шаг можно не делать, но второй желательно.</p>
26 </ol><p>Только в этом случае сессия уничтожится полностью. Первый шаг можно не делать, но второй желательно.</p>
27 <p>У сессий во Flask много тонкостей и механизмов для управления ими. Если интересно подробнее разобраться в этой теме, изучайте официальную документацию.</p>
27 <p>У сессий во Flask много тонкостей и механизмов для управления ими. Если интересно подробнее разобраться в этой теме, изучайте официальную документацию.</p>