Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Memcached会话存储中的会话变量前缀_Python_Django_Session - Fatal编程技术网

Python Django Memcached会话存储中的会话变量前缀

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

我们有几个服务将共享存储在memcached中的会话。每个服务的会话变量都有一个前缀。在为Django应用程序实现这一点时,我创建了一个自定义会话存储,它继承了缓存后端会话存储。为了预先准备django和开发人员将要设置的所有变量,我重写了get、set、del和contains的神奇方法

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中间件,而不是自定义会话存储。看,当我直接把钥匙传给超级方法时,这并没有给我带来任何麻烦。仅当使用此新的_键时。正是这种尝试失败了: