I suggest you implement your own Session and SessionInterface by subclassing flask defaults. Basically, you need to define your own session class and a session interface class.
class MyDatabaseSession(CallbackDict, SessionMixin):
def __init__(self, initial=None, sid=None):
CallbackDict.__init__(self, initial)
self.sid = sid
self.modified = False
The above class will now have a session id (sid) that will be stored in the cookie. All the data related to this session id will be stored in your mysql database. For that, you need to implement the following class and methods below:
class MyDatabaseSessionInterface(SessionInterface):
def __init__(self, db):
# this could be your mysql database or sqlalchemy db object
self.db = db
def open_session(self, app, request):
# query your cookie for the session id
sid = request.cookies.get(app.session_cookie_name)
if sid:
# Now you query the session data in your database
# finally you will return a MyDatabaseSession object
def save_session(self, app, session, response):
# save the sesion data if exists in db
# return a response cookie with details
response.set_cookie(....)
Also, you can define a model for storing session data:
class SessionData(db.Model):
def __init__(self,sid,data):
self.sid = sid
self.data = data
# and so on...
The following snippets should give you an idea:
https://github.com/fengsp/flask-snippets/blob/master/sessions/redis_session.py
https://github.com/fengsp/flask-snippets/blob/master/sessions/sqlite_session.py
https://github.com/fengsp/flask-snippets/blob/master/sessions/mongodb_session.py
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…