跨浏览器的GAE Flask全局变量

时间:2016-09-09 15:08:44

标签: python google-app-engine flask

这是我的Flask设置:

main.py

from flask import Flask
from app.views import main_bp

app = Flask(__name__)
app.register_blueprint(main_bp, url_prefix='')

app.config.py(缩短为" ......"对于此示例)

CONFIG = {
    'SITE_NAME': 'Test Site',
    'SSL': False,
    'DEBUG': True,
    'LOGGED_IN': False,
    ...
}

views.py

from config import CONFIG

@main_bp.route('/')
@main_bp.route('/<page_slug>/')
def fallback(page_slug='home'):
    # Check if logged in
    if CONFIG['LOGGED_IN']:
        return 'Logged In'
    else
        return 'Logged Out'

现在,如果我在我的某个浏览器中将CONFIG['LOGGED_IN']更改为True(让我们说谷歌Chrome浏览器),然后打开另一个浏览器访问该网站(让我们说Firefox ),然后我已经登录了这两个。如果我然后在Firefox中注销并刷新Chrome,我就会注销两者。

当我使用Django时,我从来没有注意到这样的问题......我的全局CONFIG变量在浏览器中持续存在。怪异!

我是否需要将我的CONFIG变成课程?也许只有在运行dev_appserver.py并且在生产中不会发生时才会发生这种情况?我还在学习,所以请你好!谢谢:))

注意:请忽略此示例中明显的安全问题。我向你保证,这不是我打算如何使用这段代码。

1 个答案:

答案 0 :(得分:0)

正如大卫所指出的那样,我不应该将每个会话的变量存储为全局变量。在加载相关的会话变量(如UID和会话ID)之后,我将决定这些变量。

感谢。

更新:虽然我觉得有趣的是Flask文档会提倡通过g设置全局变量(参见:http://flask.pocoo.org/docs/0.11/api/