Python + Flask - Удаление ключа из сеанса слишком быстро

У меня есть и API-сервис, который делает это:

session[parent].pop(child)

Но, когда я вызываю эту службу более одного раза и в то же время в браузере, это кажется слишком быстрым для Flask (или Python, или я не знаю). Только один "ребенок" удален. Я попытался использовать

del session[parent][child]

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

Я не знаю, является ли это проблемой Flask, проблемой Python, проблемой "Веб-материал"...

2 ответа

Это проблема "Web Stuff".

Случается, что браузер сохраняет последнюю полученную версию. Но если он получает ответы не по порядку или отменяет запрос до его завершения, браузер не будет хранить эту версию.

Флажок хранит данные для session целиком в файле cookie. На стороне сервера ничего не хранится, кроме секретности на стороне сервера, используемой для шифрования и расшифровки содержимого.

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

Затем браузер отправит этот файл cookie, который возвращается на сервер Flask каждый раз, когда выполняется запрос. Если ответ на этот запрос содержит новую версию файла cookie, то это будет храниться в хранилище cookie браузера. Любой новый запрос, начатый после сохранения, будет использовать новый файл cookie.

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


Просто установите session.modified = True каждом изменении сеанса. Это указывает флажку на обновление сеанса после запроса.

licensed under cc by-sa 3.0 with attribution.