2016-02-24 8 views
1

У меня есть такой код:Колба сессия пуста после перенаправления

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

app = Flask(__name__) 


@app.route('/') 
def index(): 
    tmplt = session.get('template', 'No template') 
    return render_template('index.html', template=tmplt.decode('utf-8')) 


@app.route('/template', methods=['POST']) 
def upload_template(): 
    session['template'] = request.files['template'].read() 
    return redirect(url_for('index')) 


if __name__ == '__main__': 
    app.secret_key = '\x0cw1\xd4\xd5\x80%O?q \xcfQrrk\xa3H\xc0[J\xae<\xc3]\xe6\x10\xc0-\xf8S\x08P4[3]PrK\xa9\xf1' 
    app.run(debug=True) 

Я ожидаю, что после успешного выполнения POST /template, переменная tmplt будет равна тому, что было загрузить. Однако он пуст. Отладка показывает, что session['template'] перед перенаправлением хранит содержимое файла, как и ожидалось.

Любой может предложить, в чем проблема? Колба документы и прибегая к помощи не помогло :(

ответ

3

Глядя на sessions implementation, кажется, что колба просто сохраняет все данные сессии в куки.

и максимальный размер печенья, в соответствии с этим answer, является 4KB . Если файл больше, чем тогда браузер просто может отказаться от печенья.

в любом случае сохранения файла в сессии не выглядит как хорошая идея.

+0

так просто ... спасибо! –

+0

пожалуйста, как это сделать? – hubert

+0

@hubert, если у вас есть проблема выше (данные сеанса слишком велики, чтобы их можно было сохранить в cookie), тогда вам нужно изменить свой код, чтобы уменьшить эти данные - не храните большие вещи в cookie или не используйте локальное хранилище браузера для сохранения пользовательских данных вместо cookie (или оба, например, имеют идентификационную информацию пользователя в файле cookie, поэтому вы можете идентифицировать пользователя на сервере и кэшировать пользовательские данные в локальном хранилище). –

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