переменные сеанса в колбе постоянно меняются - PullRequest
0 голосов
/ 30 мая 2019

У меня есть очень простое приложение для колб, которое я развернул в Heroku.Я пытаюсь определить переменную, которую я могу изменить при выполнении определенной функции.Например, если у меня есть переменная logged_in=True, я хочу иметь возможность изменить ее на logged_in=False при выполнении маршрута @app.route('/logout').Вот код:

import os
from flask import Flask, session, request, redirect, url_for, flash, g
from flask import render_template
from flask_session import Session

app = Flask(__name__)

app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

# Configure session to use filesystem
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
app.config['logged_in']=True

Session(app)

# Redirect to /login route
@app.route('/')
def index():
    return redirect(url_for("login"))

# Open main login page
@app.route("/login", methods=["POST","GET"])
def login():
    return render_template("login.html")

# Verify login credentials
@app.route("/login_check",methods=["POST"])
def login_check():
    return redirect(url_for("main_page"),code=307) if app.config['logged_in']==True else render_template("not_logged_in.html")

@app.route("/main_page", methods=["POST"])
def main_page():
    return render_template("main_page.html",name="Main page")


@app.route("/log_out", methods=["POST"])
def log_out():
    app.config['logged_in']=False
    return redirect(url_for("login"))

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

Когда я запускаю приложение локально, значение logged_in устанавливается на False при выполнении logout и не изменяется, если login запускается снова,Однако при развертывании приложения в Heroku значение logged_in возвращается True при повторном срабатывании login (странно, иногда это значение меняется, но не всегда).

Как можноЯ установил значение logged_in, чтобы оно не изменилось, пока я не обновлю его функцией?Я пытался использовать session.config['logged_in'] вместо app.config['logged_in'], но у меня была та же проблема.В идеале я хочу, чтобы значение было уникальным для каждой сессии.

Спасибо

1 Ответ

0 голосов
/ 30 мая 2019

Если вы хотите сохранить одно значение для каждого сеанса. Нет sql, как redis является рекомендацией.

import os
from flask import Flask, session, request, redirect, url_for, flash, g
from flask import render_template
from flask_session import Session
import redis

app = Flask(__name__)

app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = redis.from_url('127.0.0.1:6379')
# Configure session to use filesystem
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
app.config['logged_in']=True

Session(app)

# Redirect to /login route
@app.route('/')
def index():
    return redirect(url_for("login"))

# Open main login page
@app.route("/login", methods=["POST","GET"])
def login():
    return render_template("login.html")

# Verify login credentials
@app.route("/login_check",methods=["POST"])
def login_check():
    return redirect(url_for("main_page"),code=307) if app.config['logged_in']==True else render_template("not_logged_in.html")

@app.route("/main_page", methods=["POST"])
def main_page():
    return render_template("main_page.html",name="Main page")


@app.route("/log_out", methods=["POST"])
def log_out():
    session['key'] = 'False'
    return redirect(url_for("login"))

if __name__ == '__main__':
    app.run(debug=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...