我正在使用SqlAlchemy作为会话管理数据库,并根据文档创建了自定义SessionInterface
。
我的开发人员数据库今天关闭了,现在我无法访问我的网站,正如预期的那样。在这次活动中,有没有办法让我回到Flask的默认会话管理器?
以下是我SessionInterface
class SqlAlchemySessionInterface(SessionInterface):
#...
def open_session(self, app, request):
sid = request.cookies.get(app.session_cookie_name)
if sid:
# error is raised here when database is down
stored_session = DBSession.query.filter_by(sid=sid).first()
# ...
我对崩溃的数据库问题有一个天真的解决方案,它利用内存中的dict作为备份:
# A backup memory storage for sessions
backup = {}
class SqlAlchemySessionInterface(SessionInterface):
#...
def open_session(self, app, request):
sid = request.cookies.get(app.session_cookie_name)
if sid:
try:
stored_session = DBSession.query.filter_by(sid=sid).first()
except DatabaseError:
stored_session = backup.get('sid')
# ...
答案 0 :(得分:0)
您可以扩展默认的secure cookie
会话接口实现。
class ReliableSessionInterface(SecureCookieSessionInterface):
def open_session(self, app, request):
try:
return self._open_db_session(app, request)
except DatabaseError:
return super().open_session(app, request)
def save_session(app, session, response):
try:
self._save_session_to_db(app, session, response)
except DatabaseError:
super().save_session(app, session, response)
然而,这样的要求听起来有点奇怪。