django会话密钥在认证时改变

Dar*_*ech 10 django django-admin django-views

我有一个Django应用程序,它记录用户对两个经过身份验证的用户的产品选择.我的意图是使用request.session.session_key变量将匿名数据与用户相关联,如果他们决定稍后注册,这篇文章:

Django存储匿名用户数据

但是,当用户登录/注册时,会话密钥似乎会发生变化,因此会话密钥不再与用户关联.这是Django会话框架的正确行为吗?有没有可靠的方法来实现我正在寻找的功能?

任何帮助非常感谢.

小智 10

在settings.py中

SESSION_ENGINE ='youapp.session_backend'

在目录youapp文件session_backend.py中

from django.contrib.sessions.backends.db import SessionStore as DbSessionStore

class SessionStore(DbSessionStore):
    def cycle_key(self):
        pass
Run Code Online (Sandbox Code Playgroud)

登录后会话未更改


men*_*nov 5

尽管nnmware建议的方法可能适用于此特定情况,但还有一种更好的方法。

cycle_key我们不应该在内部执行任何操作,而应该调用super方法,然后保存会话。

因为如果您查看原始cycle_key函数内部,将会看到旧会话中的数据已复制到新会话中,但实际上并未保存。

在settings.py中

SESSION_ENGINE = 'yourapp.session_backend'
Run Code Online (Sandbox Code Playgroud)

检查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()
Run Code Online (Sandbox Code Playgroud)