我正在使用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
上面的类现在将有一个会话id(sid),该id将存储在cookie中。与此会话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, app, 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...
以下片段应该会给你一个想法:
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
您应该查看Flask KVSession,它自称
弗拉斯克签约的替补基于cookie的会话管理。而不是将数据存储在客户端,只有安全生成的ID存储在客户端上,而实际会话数据驻留在服务器上。
它基本上描述了传统的服务器端会话。注意,它支持多个数据库后端:
Flask KVSession使用simplekv包在各种后端存储会话数据。
有关导入内容和如何配置的示例,请参阅示例使用。
一位同事最近发布了这篇帖子,解释了如何工作和共享用户会话。希望能有所帮助:
- Django、Flask和Redis:在框架之间共享用户会话