【问题标题】:Flask session dict keys being converted to strings烧瓶会话字典键被转换为字符串
【发布时间】:2019-07-02 22:51:06
【问题描述】:

我在一个页面上的 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...'}>

有没有办法解决这个问题?它应该发生吗?

【问题讨论】:

    标签: python session flask


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      相关资源
      最近更新 更多