【发布时间】:2017-04-14 12:09:12
【问题描述】:
我目前正在运行一个 SESSION_ENGINE 配置为 user_sessions.backends.db 的 Django 应用程序(我正在使用 this 外部库)。 Django 自己的内置会话很棒,但是所有数据都隐藏在 base64 编码数据中。该库使会话对象可以像其他 ORM 对象一样访问。
我需要移除对这个库的依赖;将 SESSION ENGINE 更改为缓存以提高性能。
我的挑战是在不破坏当前会话数据的情况下进行此更改,这就是这个问题的意义所在。鉴于其性质,该库自然不包含 db 以外的后端,因此我必须对其进行扩展。
我应该如何解决这个问题?例如,在我的脑海中:i)我应该查看这个库保存会话数据的 db 表的内容,ii)在每次写入时将这些数据保存到缓存内存的写入功能,iii)转移到读取来自缓存(使用 db 作为后备)。
这听起来对吗?很想知道此时有什么不该做的,因为这是一项相当复杂的任务。提前致谢。
【问题讨论】:
-
我会这样做:弄清楚如何将当前会话数据序列化为 Django 的会话数据。看看是否可以将当前会话 ID 直接映射到 Django 会话框架使用的键。将所有会话数据迁移到新的会话存储。编写一个中间件,将旧会话引擎的 cookie key 转换为新的,使其对 Django 的会话引擎透明。 (如果无法重复使用密钥,请将映射 old_key => new_key 写入 Django 的缓存并查询)。
标签: django session django-sessions