【问题标题】:Flask: How to manually store session dataFlask:如何手动存储会话数据
【发布时间】:2016-01-18 21:16:38
【问题描述】:

我有一个带有一些 ajax 调用的烧瓶应用程序,它使用 mySQL 来存储会话数据和会话 ID。

我使用 Flask 的 session 来保存 session id,但无法使 session id 在视图中保持不变。

这一切在本地运行时都有效,但一旦我将其推送到服务器后就不行了。

如何使用会话或其他方式存储唯一的会话 ID?

from flask import session

@app.route('/get_data/', methods=['POST'])
def get_form_data():
    session['session_id'] = random_key
    if request.method == "POST":
        ...

@app.route('/process_data/')
def process_data():
    get_from_db(session['session_id'])

HTML

<script type="text/javascript">
$(function() {
    $("#chart").load("/get_data/", function() {
        $('#check_count').load('/process_data/', function() {
        });
    });
});
</script>

编辑:我设置了会话使用的密钥,会话在特定功能中工作。

会话在get_data 函数中工作。下一个函数也需要会话数据并且找不到密钥。

【问题讨论】:

  • 您找到解决方案了吗?

标签: javascript ajax flask


【解决方案1】:

您是否设置了应用的密钥?

来自Flask 网站:

为了使用会话,您必须设置一个密钥。

# set the secret key.  keep this really secret:
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'

【讨论】:

  • 我确实设置了密钥,谢谢。会话工作在本地运行。关于这个主题有很多 SO 问题,但它们对我没有帮助。
  • @wbg - 你的会话是完全不能工作还是不能在 Ajax 请求中工作?
  • 会话 r 正常工作。在服务器上运行时发生故障。我读过 ajax 不携带 cookies.tbh 我不确定我知道那是什么意思..
  • 我确实解决了这个忘记接受自己的答案。存储数据的非常简单的方法是在 uri 本身中。
【解决方案2】:

关于使用 Ajax 调用视图时,flask 上的“会话”对象如何不起作用的话题很多。

我对此很陌生,想要一个不涉及 Redis 服务器的简单解决方法。我还在 OpenShift 上将这个项目作为免费层运行,并添加更多的墨盒只是为了传递会话 ID 感觉有点矫枉过正。

因此,我最终将“会话 ID”作为查询存储在 URL 中,并使用模板添加它。

$("#data_chart").load("/process_data" + {{ session_id }}");


@app.route('/process_data')
def process_data():
    session_id = request.args.get("session_id")
    # do a bunch of stuff here

    # propagate the ID for other views to access=
    session_string = '?session_id=%' % session_id
    return render_template('output.html', session_id=session_string)

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 2017-12-22
    • 2017-01-10
    • 2018-02-17
    • 2015-11-20
    • 2016-09-01
    • 2019-03-11
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多