2016-09-09 4 views
-1

間で永続的なグローバル変数ここでは私のフラスコの設定があります:(この例では、 "..." と短縮)GAEフラスコブラウザ

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' 

私のブラウザの1つでCONFIG['LOGGED_IN']Trueに変更した場合(Google Chromeと言う)、別のブラウザをウェブサイト(Firefoxとしましょう)で開くと、すでに両方にログインしています。 FirefoxでログアウトしてChromeをリフレッシュすると、両方でログアウトします。

私がDjangoを使用していたとき、私はこのような問題に気付かなかった...私のグローバルなCONFIG変数は、ブラウザ間で永続しています。奇妙な!

CONFIGをクラスにする必要はありますか?これはdev_appserver.pyを実行しているときにのみ発生し、実稼働環境では発生しませんか?私はまだ学んでいますので、素敵にしてください!ありがとう:)

注:この例の危険なセキュリティ問題は無視してください。私はこのコードをどのように使用する予定ではないことを私は保証します。

+2

**グローバルを使用しないでください**あなたはジャンゴで問題に気づいたことがないのはなぜ謎です。ユーザーについて何かを保存する必要がある場合は、 'session'を使用してください。 – davidism

+0

@davidismしかし、デバッグのためにJS Consoleにエラーを表示するかどうかをスクリプトに伝える 'CONFIG ['DEBUG']'のような変数もあります。セッションにそのようなものを保存すれば、誰でも簡単に変更できます。 – ThePloki

+0

いいえ、セッションは改ざんから安全であるように署名されています。ブラウザの値を見てください。また、アプリケーション設定で設定された読み取り設定は、特定のセッションについての変更状態の保存とは異なります。 – davidism

答えて

0

デービッドが指摘したように、私は、セッションごとに変化する変数をグローバルとして保存するべきではありません。代わりに、UIDやセッションIDなどの関連するセッション変数をロードした後、これらの変数を決定します。

ありがとうございました。

更新:Athough、私はそれが面白いフラスコのドキュメントがg経由でグローバルを設定提唱することを見つける(参照:http://flask.pocoo.org/docs/0.11/api/を)。