当使用flask - session
结合SQLAlchemy
将session
存储到数据库中时,根据你的配置,会创建一个名为db_session
的表(假设你在配置中设置SESSION_SQLALCHEMY_TABLE = 'db_session'
)。这个表的结构大致如下:
列名 | 类型 | 说明 |
---|---|---|
id | String | 会话ID,唯一标识每个会话,前缀为配置中的SESSION_KEY_PREFIX (例如session: )加上实际的会话ID值。 |
session_data | LargeBinary | 序列化后的会话数据,包含了在应用中设置到session 的所有键值对信息。 |
expiry | DateTime | 会话的过期时间。如果设置了SESSION_PERMANENT = True ,关闭浏览器时会话会失效,但在某些情况下(例如服务器端的会话管理策略),也可能会设置一个具体的过期时间。 |
例如,假设你有一个应用,通过session["uname"] = "xiaoming"
和session["age"] = 18
设置了会话数据,并且SESSION_KEY_PREFIX = "session:"
,那么在db_session
表中可能会有如下一条记录:
列名 | 值 |
---|---|
id | session:123e4567 - e89b - 12d3 - a456 - 426614174000 (这里123e4567 - e89b - 12d3 - a456 - 426614174000 是一个示例会话ID) |
session_data | `b'\x80\x03}q\x00(X\x04\x00\x00\x00unameq\x01X\x08\x00\x00\x00xiaomingq\x02X\x03\x00\x00\x00ageq\x03K\x12u.' (这是经过序列化后的会话数据,具体内容因序列化方式而异) |
expiry | 2024 - 01 - 01 12:00:00 (假设的过期时间) |
实际存储的session_data
是经过序列化的二进制数据,在Python中,flask - session
通常使用pickle
模块进行序列化和反序列化。当应用需要获取会话数据时,flask - session
会根据id
从数据库中读取session_data
,然后反序列化得到原始的会话数据。
要查看数据库中实际的数据,可以使用数据库客户端(如MySQL Workbench
连接到你的MySQL数据库,然后执行SELECT * FROM db_session;
这样的SQL语句来查看表中的记录。
在代码层面,如果使用SQLAlchemy的inspect
工具,也可以获取表结构信息,示例代码如下:
from sqlalchemy import inspect
# 假设db是已经初始化好的SQLAlchemy实例
inspector = inspect(db.engine)
columns = inspector.get_columns('db_session')
for column in columns:
print(column['name'], column['type'])
这段代码会打印出db_session
表中每列的名称和类型。