Python Django Memcached会话存储中的会话变量前缀
我们有几个服务将共享存储在memcached中的会话。每个服务的会话变量都有一个前缀。在为Django应用程序实现这一点时,我创建了一个自定义会话存储,它继承了缓存后端会话存储。为了预先准备django和开发人员将要设置的所有变量,我重写了get、set、del和contains的神奇方法Python Django Memcached会话存储中的会话变量前缀,python,django,session,Python,Django,Session,我们有几个服务将共享存储在memcached中的会话。每个服务的会话变量都有一个前缀。在为Django应用程序实现这一点时,我创建了一个自定义会话存储,它继承了缓存后端会话存储。为了预先准备django和开发人员将要设置的所有变量,我重写了get、set、del和contains的神奇方法 from django.contrib.sessions.backends.cache import SessionStore as CacheSessionStore from django.conf im
from django.contrib.sessions.backends.cache import SessionStore as CacheSessionStore
from django.conf import settings
class SessionStore(CacheSessionStore):
key_prefix = settings.SESSION_PREFIX
def __setitem__(self, key, value):
new_key = self.key_prefix + key
return super(SessionStore, self).__setitem__(new_key, value)
def __getitem__(self, key):
new_key = self.key_prefix + key
return super(SessionStore, self).__getitem__(new_key)
def __contains__(self, key):
new_key = self.key_prefix + key
return super(SessionStore, self).__contains__(new_key)
def __delitem__(self, key):
new_key = self.key_prefix + key
return super(SessionStore, self).__delitem__(new_key)
结果是没有发生登录,我只是不断返回登录页面。在调试过程中,我看到它正在使用我的前缀创建会话密钥,并在memcachced中创建会话。在对我的用户进行身份验证后,初始登录变量将成功保存到memcached中的会话中。在这个过程中的某个地方,它决定我是一个匿名用户,并将我返回到登录页面。它在此过程中创建的会话存在于memcached中。返回登录屏幕后,我在cookie中看不到会话ID
RemoteUser中间件正在刷新会话。我在这里不知所措。看起来我也需要覆盖get和pop方法
def get(self, key, default=None):
new_key = self.key_prefix + key
return super(SessionStore, self).get(new_key, default)
def pop(self, key, *args):
new_key = self.key_prefix + key
return super(SessionStore, self).pop(new_key, *args)
看起来我还需要覆盖get和pop方法
def get(self, key, default=None):
new_key = self.key_prefix + key
return super(SessionStore, self).get(new_key, default)
def pop(self, key, *args):
new_key = self.key_prefix + key
return super(SessionStore, self).pop(new_key, *args)
我认为您的问题是RemoteUser中间件,而不是自定义会话存储。看,当我直接把钥匙传给超级方法时,这并没有给我带来任何麻烦。仅当使用此新的_键时。这一尝试失败了:我认为您的问题是RemoteUser中间件,而不是自定义会话存储。看,当我直接把钥匙传给超级方法时,这并没有给我带来任何麻烦。仅当使用此新的_键时。正是这种尝试失败了: