[英]Django sessions stop working after Redis implementation
我已經使用此鏈接實現了 redis,並且在此會話之后必須存儲在 db 的 redis 中。 當我重新啟動我的應用程序時配置后。 我的會話出錯了。
例如,假設 IN 函數A
我聲明了一個會話,當我從瀏覽器訪問另一個鏈接並嘗試獲取相同的會話時,該會話已經消失了。 甚至不存在會話密鑰。 request.session.keys() 為空。
這是我的redis配置:
REDIS_PROT = "redis://"
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
REDIS_DB = 0
REDIS_CACHE_SERVER = REDIS_PROT + REDIS_HOST + ":" + str(REDIS_PORT) + "/" + str(REDIS_DB)
REDIS_CACHEALOT_SERVER = REDIS_PROT + REDIS_HOST + ":" + str(REDIS_PORT) + "/" + str(REDIS_DB + 3)
DJANGO_REDIS_IGNORE_EXCEPTIONS = True
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": REDIS_CACHE_SERVER,
"OPTIONS": {
"PARSER_CLASS": "redis.connection.HiredisParser",
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"COMPRESS_MIN_LEN": 10,
"SOCKET_CONNECT_TIMEOUT": 5, # in seconds
"SOCKET_TIMEOUT": 5, # in seconds
}
},
"cachealot": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": REDIS_CACHEALOT_SERVER,
"OPTIONS": {
"PARSER_CLASS": "redis.connection.HiredisParser",
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"COMPRESS_MIN_LEN": 10,
"SOCKET_CONNECT_TIMEOUT": 5, # in seconds
"SOCKET_TIMEOUT": 5, # in seconds
}
}
}
# CacheALot service settings
CACHALOT_ENABLED = True
CACHALOT_CACHE = 'cachealot'
# Django Redis Session App Configuration
SESSION_REDIS_HOST = REDIS_HOST
SESSION_REDIS_PORT = REDIS_PORT
SESSION_REDIS_DB = REDIS_DB + 4
#SESSION_REDIS_PASSWORD = 'password'
SESSION_REDIS_PREFIX = 'session'
SESSION_ENGINE = 'redis_sessions.session'
# If you prefer domain socket connection, you can just add this line instead of SESSION_REDIS_HOST and SESSION_REDIS_PORT.
#SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH = '/var/run/redis/redis.sock'
# Celery Configurations
REDIS_CELERY_BROKER_SERVER = REDIS_PROT + REDIS_HOST + ":" + str(REDIS_PORT) + "/" + str(REDIS_DB + 1)
REDIS_CELERY_RESULT_SERVER = REDIS_PROT + REDIS_HOST + ":" + str(REDIS_PORT) + "/" + str(REDIS_DB + 2)
BROKER_URL = REDIS_CELERY_BROKER_SERVER
CELERY_RESULT_BACKEND = REDIS_CELERY_RESULT_SERVER
CELERY_ALWAYS_EAGER=False
知道為什么我會收到 django 會話的關鍵錯誤。
似乎您只是為了啟用緩存會話做了很多工作。 除了django-redis之外,您為什么還使用django-redis-sessions 、 django-cachalot ?
讓我們用一個對我有用的最小配置來簡化,只使用django-redis 。 我正在遵循他們的指南,以及關於設置會話和使用緩存會話的Django 文檔:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
就是這樣,通過請求視圖和檢查request.session
測試它,或者,如果您在請求之外,使用您的會話存儲:
>>> from django.contrib.sessions.backends.cache import SessionStore
>>> s = SessionStore(session_key='ff882814010ccbc3c870523934fee5a2')
>>> s.save()
>>> s.session_key
'ff882814010ccbc3c870523934fee5a2'
>>> s.session_data
'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'
>>> s.get_decoded()
{'user_id': 42}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.