我一直在做一个小项目,我开始想知道如何在用户登录或注销后保留一些数据。
例如,假设用户正在向他的购物车添加商品而他没有登录。默认情况下,Django会话会在用户登录或注销后生成新的session_id。 当用户将5件产品添加到他的购物车中并在之后登录时,他的购物车将被清除。
如何在用户数据中实现持久性元素?例如,我应该使用一些信号或某种中间件来将购物车从旧会话绑定到新会话?
我的主要目标是保证安全,所以我不想禁用某些安全机制。
答案 0 :(得分:1)
您必须使用数据库支持的会话。来自doc:
您需要添加' django.contrib.sessions'到您的INSTALLED_APPS 设置。
配置完安装后,运行manage.py migrate以安装存储会话数据的单个数据库表。
然后你必须确保在注销/登录过程中没有调用session.flush()
,这意味着避免使用django.contrib.auth.logout()
女巫会调用session.flush(),它也在{ {1}}。 django.contrib.login()
用户自己避免丢失会话数据。 login/logout的来源。
答案 1 :(得分:0)
会话在登录/注销时刷新,作为安全措施。如果要保留一些变量,可以使用以下解决方案:
https://stackoverflow.com/a/41849076/146289
它主要涉及备份旧值,然后在新会话中恢复它们。