'Django Sessions using cached_db and redis not fetching or saving session data
Dependencies
Django==3.2.6
redis>=3.5.3,<3.6.0
django-redis>=4.12.1,<4.13.0
Settings
SESSION_COOKIE_SAMESITE = None
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://:12345678@redis:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
}
}
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"corsheaders.middleware.CorsMiddleware",
]
Test API view
@api_view(["GET"])
def test(request):
print(request.session.__dict__)
if not request.session.session_key:
request.session.save()
if not "user_id" in request.session:
request.session["user_id"] = "test"
request.session.modified = True
print(request.session.__dict__)
return Response({"hello"})
As you can see I have triggered the session to force save as well as changed the modified value to True
Every time a request is made to this API, none of the session data is saved. The session_key is also always none. Does anyone know why this is?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
