烧瓶会话字典键被转换为字符串

时间:2019-07-02 11:19:38

标签: python session flask

我在一页的Flask会话中设置值,并在下一页检索值。在这两者之间,我正在使用的字典中的键似乎已从整数转换为字符串。这应该发生吗?

示例:

from flask import session, redirect

@app.route('/')
def page_1():

    test = {}
    test[1] = {}
    print(test)             # outputs >>> {1: {}}

    session['store'] = {}
    session['store'][1] = {}
    return redirect('/two')

@app.route('/two')
def page_2():
    print(session)

印刷品的输出看起来像这样(并且在1起作用的情况下,向字典查询键'1'返回一个错误):

<SecureCookieSession {'store': {'1': {}}, 'csrf_token': 'biglongtoken...'}>

有什么办法解决吗?应该发生吗?

1 个答案:

答案 0 :(得分:1)

创建会话时,会话中存储的所有内容都经过安全签名(未加密),并作为cookie发送给客户端,当客户端重新连接到您的站点时,它将cookie送回,您反序列化并使用flask.session访问。

https://github.com/pallets/flask/blob/1351d0a56580df36872b466eb245e7634c20dab5/src/flask/sessions.py#L378

Flask使用itsdangeous签名会话数据,这会将您的数据序列化为JSON。在JSON中,键只能是字符串,非字符串会被转换。从客户端读取cookie时,键仍为字符串。

https://github.com/pallets/itsdangerous/blob/8e611d7373acc874cc8bd3fc480cf3cf7b5b6a10/src/itsdangerous/serializer.py#L42