加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Flask – 将会话数据保存在数据库中,就像使用cookie一样

发布时间:2020-12-20 11:28:22 所属栏目:Python 来源:网络整理
导读:我正在使用Flask创建一个Web应用程序. 我想知道是否可以保存用户会话数据 session['ishappy'] = true 在数据库中,就像在Django中使用SessionMiddleware一样,您可以选择在cookie和数据库之间进行选择. 如果它是我应该导入我的Flask应用程序. 解决方法 我建议
我正在使用Flask创建一个Web应用程序.

我想知道是否可以保存用户会话数据

session['ishappy'] = true

在数据库中,就像在Django中使用SessionMiddleware一样,您可以选择在cookie和数据库之间进行选择.

如果它是我应该导入我的Flask应用程序.

解决方法

我建议您通过继承flask默认值来实现自己的Session和SessionInterface.基本上,您需要定义自己的会话类和会话接口类.

class MyDatabaseSession(CallbackDict,SessionMixin):

    def __init__(self,initial=None,sid=None):
        CallbackDict.__init__(self,initial)
        self.sid = sid
        self.modified = False

上面的类现在将具有将存储在cookie中的会话ID(sid).与此会话ID相关的所有数据都将存储在您的mysql数据库中.为此,您需要实现以下类和方法:

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,session,response):
        # save the sesion data if exists in db
        # return a response cookie with details
        response.set_cookie(....)

此外,您还可以定义用于存储会话数据的模型:

class SessionData(db.Model):
    def __init__(self,sid,data):
        self.sid = sid
        self.data = data
        # and so on...

以下片段应该给你一个想法:

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读