LINUX.ORG.RU

В чем отличие сессий во Flask от сессий в PHP?

 , , ,


1

3

В php же в куках хранится id сессии, а во flask там у сессионной куки(session) зашифрованное value. По сути тот же механизм, но почему в php сессии серверные а во flask клиентские если данные сессии хранятся в обоих случаях на сервере? И еще вопрос:во flask по умолчанию куки сессии существуют до тех пор, пока не закроется браузер. Если пользователи не закроют браузер в течение длительного промежутка, то как это скажется на нагрузке сервера и потреблении его памяти?


во flask там у сессионной куки(session) зашифрованное value

если данные сессии хранятся в обоих случаях на сервере

В случае flask как раз на сервере ничего не хранится, ведь содержимое сессии зашифровано в куках. Соответственно никакой нагрузки сервера и потребления памяти нет

arthas
()
Ответ на: комментарий от arthas

Сессия

А как можно зашифровать значения, которые лежать в словаре session на стороне клиента? Там же в куке лежить просто value зашифрованное, как из него потом вытащить session[‘test’] и пр.?

VolanQ
() автор топика
Ответ на: комментарий от PolarFox

Сессия

В общем алгоритм такой(поправьте):

  1. На сервере создается сессия
  2. Сессия передается браузеру и хранится как сессионная кука с именем session и зашифрованным значением.
  3. При следующем обращении к серверу, браузер отправляет значение из куки session и flask его расшифрует с помощью secret_key. Если расшифровать значение не удалось, то в session на сервере ничего не попадает.
VolanQ
() автор топика
Ответ на: Сессия от VolanQ

https://flask.palletsprojects.com/en/1.1.x/config/#PERMANENT_SESSION_LIFETIME

У куки помимо прочего подписана информация о времени её выдачи. Кстати очень важная деталь про которую я забыл. По умолчанию куки во фласке подписаны, но не зашифрованы, т.е. хранить в них что-то что пользователю знать не надо нельзя.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

Сессия

Важное уточнение, спасибо посмотрю

VolanQ
() автор топика

Отличается тем, что в Flask, как и в любой другой системе с client-side sessions нет нормального механизма инвалидации сессий. В связи с чем нельзя, к примеру, при логине загрузить в сессию все роли пользователя, а дёргать каждый раз БД.

anonymous
()

Не знаю, как во фласке, а джанго способ хранения сессии настраивается, в том числе есть вариант и клиентских сессий в куках. Я уверен, что в любом нормальном нелегковесном фреймворке должна быть такая возможность.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от arthas

… ведь содержимое сессии зашифровано в куках.

О боже милостливый! :-O Нафиг нафиг, в этот ваш Flask не ногой!

anonymous
()
Ответ на: комментарий от PolarFox

Сессия

А если срок действия куки в браузере посетителю каким-то образом удастся изменить, то flask это поймет? Или срок действия сессии flask шифрует тоже внутри, вне зависимости какой срок отображает браузер?

VolanQ
() автор топика
Ответ на: Сессия от VolanQ

Не шифрует, а подписывает, время создания является частью подписываемой информации.

PolarFox ★★★★★
()
Ответ на: Сессия от VolanQ

У flask куки нешифрованные, там base64. Но есть подпись которая позволяет проверить менял ли пользователь какие-либо данные в ней.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

Сессия

Куки то понятно, что не шифрованные. Когда речь идет о сессиях, разве они не сохраняются в шифрованные куки?

И еще, эта подпись где то хранится на стороне клиента?

VolanQ
() автор топика
Ответ на: комментарий от PolarFox

base64

время - это время действия сессионной куки?

Эти три фрагмента кодируется все через base64? Данные можно расшифровать декодером, а почему время и подпись не получиться?

VolanQ
() автор топика
Ответ на: base64 от VolanQ

Время это время создания сессии. Время и подпись может и не в base64, не помню точно.

PolarFox ★★★★★
()
Последнее исправление: PolarFox (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.