我有一个Django应用程序,它记录了用户的产品选择两种身份验证的用户。 我的目的是使用request.session.session_key
变量匿名数据与用户相关联的,如果他们决定以后注册,一拉这个帖子:
Django的存储匿名用户数据
然而,似乎当寄存器,这样会话密钥可以不再与用户相关的/用户登录会话密钥的变化。 这是Django的会话框架的正确行为。 是否有一个坚实的方式来实现我要找的功能?
任何帮助非常赞赏。
我有一个Django应用程序,它记录了用户的产品选择两种身份验证的用户。 我的目的是使用request.session.session_key
变量匿名数据与用户相关联的,如果他们决定以后注册,一拉这个帖子:
Django的存储匿名用户数据
然而,似乎当寄存器,这样会话密钥可以不再与用户相关的/用户登录会话密钥的变化。 这是Django的会话框架的正确行为。 是否有一个坚实的方式来实现我要找的功能?
任何帮助非常赞赏。
在settings.py
SESSION_ENGINE = 'youapp.session_backend'
在文件session_backend.py目录youapp
from django.contrib.sessions.backends.db import SessionStore as DbSessionStore
class SessionStore(DbSessionStore):
def cycle_key(self):
pass
和会话登录后没有改变
虽然通过nnmware建议的方法可以对这种特殊情况下的工作,有一个更好的。
而不是仅仅做什么都不里面cycle_key
,我们应调用超级方法,然后保存会话。
因为如果你看原来里面cycle_key
功能,你会看到从旧的会话中的数据复制到新的一个,但实际上并没有保存。
在settings.py
SESSION_ENGINE = 'yourapp.session_backend'
检查SESSION_ENGINE指向在一个模块(.py文件),而不是后端类!
现在,在“yourapp / session_backend.py”做到以下几点:
from django.contrib.sessions.backends.db import SessionStore as DbSessionStore
class SessionStore(DbSessionStore):
def cycle_key(self):
super(SessionStore, self).cycle_key()
self.save()
解决的办法之一也将是更新会话存储旧会话数据:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django.contrib.sessions.backends.db import SessionStore as DbSessionStore
from shop.models.cart import Cart
class SessionStore(DbSessionStore):
def cycle_key(self):
old_session_key = super(SessionStore, self).session_key
super(SessionStore, self).cycle_key()
self.save()
Cart.objects.filter(session_key=old_session_key).update(session_key=self.session_key)