'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