Flask:如何手动存储会话数据

时间:2016-01-18 21:16:38

标签: javascript ajax flask

我有一个烧瓶应用程序,其中包含一些使用mySQL存储会话数据和会话ID的ajax调用。

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

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

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

$watch

HTML

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'])
编辑:我为会话使用设置了密钥,会话在特定功能中工作。

会话在<script type="text/javascript"> $(function() { $("#chart").load("/get_data/", function() { $('#check_count').load('/process_data/', function() { }); }); }); </script> 函数中有效。下一个功能还需要会话数据,无法找到密钥。

2 个答案:

答案 0 :(得分:0)

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

来自Flask网站:

  

要使用会话,您必须设置密钥。

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

答案 1 :(得分:0)

在使用Ajax调用视图时,有很多关于如何使用flask上的“session”对象不起作用的线程。

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

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

$("#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)