Flask - Save session data in database like using cookies

…衆ロ難τιáo~ 提交于 2019-11-29 08:13:31
codegeek

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:

http://flask.pocoo.org/snippets/75/

http://flask.pocoo.org/snippets/86/

http://flask.pocoo.org/snippets/110/

Day

You should check out Flask-KVSession, which is self-described as

a drop-in replacement for Flask‘s signed cookie-based session management. Instead of storing data on the client, only a securely generated ID is stored on the client, while the actual session data resides on the server.

Which basically describes traditional server-side sessions. Note that it supports multiple database backends:

Flask-KVSession uses the simplekv package for storing session data on a variety of backends.

See the Example Use for an example of what to import and how to configure it.

One of colleagues recently posted the post, which explains how to work and share the user sessions. Hope that helps:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!