我正在研究部署在heroku上的Flask应用程序。
该应用程序使用Flask-Session我需要帮助来正确配置服务器端会话存储。
我首先将其配置为使用Flask-Session配置=“ SESSION_FILE_DIR” = mkdtemp()在服务器端存储会话。但是,Heroku在这种情况下无法以这种方式正常运行。 Heroku不会存储会话,用户只会随机注销。我已经看到了将会话存储在数据库中而不是在服务器临时文件夹中的建议。
我已尝试使用“ SESSION_TYPE” =“ sqlalchemy”移至会话的数据库存储。我尚未能够正确运行此命令以在locahost上进行操作。
也遵循了此How to save sessions in a Postgres database?,但没有成功...
"""application.py"""
import os, datetime
from tempfile import mkdtemp
from werkzeug.exceptions import default_exceptions, HTTPException, InternalServerError
from werkzeug.security import check_password_hash, generate_password_hash
from flask import Flask, flash, jsonify, redirect, render_template, request, session
from flask_session import Session
# Import my package modules
from helpers import apology, login_required, status_mapper
from class_h import *
# Configure application
app = Flask(__name__)
# Ensure responses aren't cached
@app.after_request
def after_request(response):
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
response.headers["Expires"] = 0
response.headers["Pragma"] = "no-cache"
return response
原始会话配置->
# # Configure session to use filesystem (instead of signed cookies)
# app.config["SESSION_FILE_DIR"] = mkdtemp()
# app.config["SESSION_PERMANENT"] = False
# app.config["SESSION_TYPE"] = "filesystem"
# Session(app)
我的class_h.py模型文件导入到主文件中,创建数据库实例,该实例在application.py中初始化
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# create a db but using flask_sqlalchemy syntax
db = SQLAlchemy()
Flask-SQLAlchemy配置,Heroku Postgres数据库
app.config["SQLALCHEMY_DATABASE_URI"] = os.getenv("DATABASE_URL")
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db.init_app(app)
配置flask_session以使用SQLAlchemy(而不是已签名的Cookie)
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "sqlalchemy"
Session(app)
在对sessions.py应用了[此修复程序](https://github.com/mnbf9rca/flask-session/commit/9ad4b23e946beba1fdbd23dc406058a77dac6676)之后,文件行为是未在数据库中创建会话记录。 如果未应用修复程序,则使用无值创建会话。
尝试过
from flask_sessionstore import Session
但是我得到相同的行为。
尝试:
["SESSION_PERMANENT"] = True
创建的会话的到期时间为Null(而不是未创建)。
感谢您的帮助!花了几天的时间对此进行挖掘。