登录会话每几秒钟过期

时间:2019-04-15 12:14:56

标签: python-3.x heroku flask flask-login

我使用标准的Flask登录库访问我的应用程序。登录超时为300分钟。在我的本地计算机上,该库正常运行-我登录到应用,执行了某项操作并单击“注销”-一切正常。 然后,我将应用“推送”到heroku并登录。我可以做一些事情,但是10-15秒后会话消失了,我必须重新登录。

怎么了?

我试图解决问题,但是没有帮助。我的heroku计划是“爱好/开发”。 有什么想法可以帮我吗?

#Init sessions 
Session(app) 
#Login manager 
loginmanager = LoginManager() ... ... 
# Call 'login required' function, when I need to protect my function: 
# View function for custom admin 
@app.route(def_route+'/', methods=['GET', 'POST']) 
@app.route("/", methods=['GET', 'POST']) 
@login_required 
def index(): 
   #try: 
   errorvar = 0 ...`

我使用的软件:

alembic==1.0.7
APScheduler==3.6.0
asn1crypto==0.24.0
Babel==2.6.0
blinker==1.4
certifi==2019.3.9
cffi==1.12.2
chardet==3.0.4
Click==7.0
cryptography==2.6.1
Flask==1.0.2
Flask-Admin==1.5.3
Flask-BabelEx==0.9.3
Flask-JWT==0.3.2
Flask-JWT-Extended==3.18.0
Flask-Login==0.4.1
Flask-LoginManager==1.1.6
Flask-Mail==0.9.1
Flask-Migrate==2.4.0
Flask-Principal==0.4.0
Flask-Script==2.0.6
Flask-Security==3.0.0
Flask-Session==0.3.1
Flask-SQLAlchemy==2.3.2
Flask-WTF==0.14.2
gunicorn==19.9.0
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10
Mako==1.0.7
MarkupSafe==1.1.0
ndg-httpsclient==0.5.1
passlib==1.7.1
psycopg2==2.7.6.1
pusher==2.1.3
pyasn1==0.4.5
pycparser==2.19
PyJWT==1.4.2
PyNaCl==1.3.0
pyOpenSSL==19.0.0
python-dateutil==2.8.0
python-editor==1.0.4
pytz==2018.9
requests==2.21.0
six==1.12.0
speaklater==1.3
SQLAlchemy==1.2.18
tzlocal==1.5.1
urllib3==1.24.1
virtualenv==16.2.0
Werkzeug==0.14.1
WTForms==2.2.1

设置会话时间寿命:

@app.before_request
def make_session_permanent():
    session.permanent = True
    app.permanent_session_lifetime = timedelta(minutes=300)

2 个答案:

答案 0 :(得分:2)

您应避免使用本地file systemmemory SESSION_TYPE,在Heroku上配置以下服务之一:

  • redis:RedisSessionInterface
  • memcached:MemcachedSessionInterface
  • mongodb:MongoDBSessionInterface
  • sqlalchemy:SqlAlchemySessionInterface

Heroku的FS和内存在每次请求时都会丢失。

答案 1 :(得分:1)

在少数情况下(例如,每24小时一次以及在每次部署中),您应尝试将redis作为dyno clear FS进行会话。由于不共享缓存(如果使用了FS),使用多个dyno可能会导致相同的问题。