使用远程服务器隧道时,Flask会话变量消失

时间:2016-12-21 23:27:51

标签: python session flask session-cookies

我正在尝试在烧瓶应用程序中使用会话变量,如下所示:

from flask import Flask, session
from flask import request
from flask import render_template
from flask import redirect, url_for

app = Flask(__name__)

app.secret_key = 'verysecretindeed'

@app.route('/')
def myform():
    session['ax'] = 42
    return render_template("test1.html", session=session)

@app.route('/', methods=['GET', 'POST'])
def modifyvalue():

    incr = request.form('incr')
    a = session['ax']
    if incr == '1':
         a = a + 1
    session['ax']=a
    return render_template("test1.html", session=session)

if __name__ == '__main__':
    app.run(debug=True)

此代码在我的本地计算机上运行良好。

现在,我在远程服务器上运行代码,并通过以下方式将远程服务器的localhost隧道传送到我的localhost:

ssh -N -f -L localhost:5000:localhost:5000 <username>@<server>.blah.edu

现在,当我运行此代码时,在从网页获取“incr”请求后,我得到:

keyerror:在modifyvalue()函数中使用'ax'。

当我在myform()函数中打印会话时,值就在那里。但是,当我在modifyvalue()函数中打印会话时,会话为空。

我尝试过设置APPLICATION_ROOT,如:

app.config['APPLICATION_ROOT']= '/path/to/code/'

我尝试了其他浏览器,隐姓埋名,似乎没什么用。 我也尝试在myform()中首先清除会话。我的app.secret_key只是一个静态字符串值。

知道可能出现什么问题吗?

1 个答案:

答案 0 :(得分:0)

你有两个视图功能,第一个为会话添加一个值,另一个编辑这个值,它们使用相同的url,所以你可以将它们组合起来。好吧,如果你说我发布表格,那么检查post方法

@app.route('/', methods=['GET', 'POST'])
def home():
    session['ax'] = 42
    if request.method == 'POST':
        incr = request.form('incr')
        a = session['ax']
        if incr == '1':
            a = a + 1
        session['ax'] = a
    return render_template("test1.html", session=session)