2016-09-09 2 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' 

Теперь, если я изменю CONFIG['LOGGED_IN'] на True в одном из своих браузеров (скажем, Google Chrome), а затем откройте еще один браузер на веб-сайте (скажем, Firefox), то я уже вошел в систему на обоих. Если я затем выйду в Firefox и обновить Chrome, я выйду на оба.

Когда я использовал Django, я никогда не замечал такой проблемы ... моя глобальная переменная CONFIG сохраняется в браузерах. Weird!

Должен ли я сделать свой CONFIG в классе? Может быть, это происходит только при запуске dev_appserver.py и не произойдет в процессе производства? Я все еще учусь, поэтому, пожалуйста, будь красивой! Спасибо :)

Примечание: Пожалуйста, игнорируйте вопиющие проблемы безопасности в этом примере. Уверяю вас, я не планирую использовать этот код.

+2

** Не используйте глобалам ** Почему вы никогда не замечали проблемы в Django является тайной , Если вам нужно что-то хранить о пользователе, используйте 'session'. – davidism

+0

@davidism Но у меня также есть переменные типа 'CONFIG ['DEBUG']', который сообщает моему сценарию, показывать или нет ошибки в консоли JS для отладки. Если я храню такие вещи в сеансе, тогда любой может легко изменить его. – ThePloki

+0

Нет, они не могут, сессия подписана, чтобы быть защищенной от подделки, взгляните на ее значение в браузере. Кроме того, конфигурация чтения, установленная при настройке приложения, отличается от сохранения изменения состояния определенных сеансов. – davidism

ответ

0

Как указал Давидизм, я не должен хранить переменные, которые изменяются за сеанс как глобальные. Вместо этого я буду решать эти переменные после загрузки соответствующих переменных сеанса, таких как UID и Session ID.

Спасибо.

Update: Athough, я нахожу интересным, что колба документация будет выступать за установление глобалам через g (см: http://flask.pocoo.org/docs/0.11/api/).

Смежные вопросы