Django: el usuario vuelve a ingresar a la sesión haciendo clic en el botón de retroceso del navegador después de cerrar la sesión

Estoy creando una aplicación web en Django. Cuando un usuario que ha iniciado sesión hace clic en “Cerrar sesión”, la página de cierre de sesión aparece correctamente. Sin embargo, al hacer clic en el botón Atrás en el navegador, el usuario puede volver a ingresar a la sesión. Para solucionar este problema, seguí esta publicación: ¿ Deshabilitar el botón “Atrás” del navegador después de cerrar sesión? , y utiliza cache_control. Sin embargo, el usuario todavía puede volver a ingresar a la sesión ‘cerrada’ haciendo clic en el botón Atrás. Aquí está el código relevante:

views.py:

from django.views.decorators.cache import cache_control @cache_control(no_cache=True, must_revalidate=True, no_store=True) def logout_view(request): #c={} #c.update(csrf(request)) logout(request) #request.session.flush() #request.user = AnonymousUser #Redirect to logout page return render_to_response('gamestore/logout.html') @cache_control(no_cache=True, must_revalidate=True, no_store=True) def login_view(request): #do something 

settings.py:

 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) SETTINGS_PATH = os.path.realpath(os.path.dirname(__file__)) DATABASE_PATH = os.path.join(BASE_DIR, 'db.sqlite3') TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. #"/home/mukhera3/Desktop/wsdProject/gamestore/templates", #TODO use absolute path here ) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '[the-secret-key-needs-to-stay-secret]' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True TEMPLATE_DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'gamestore', ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) ROOT_URLCONF = 'wsdProject.urls' WSGI_APPLICATION = 'wsdProject.wsgi.application' # Database # https://docs.djangoproject.com/en/1.7/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': DATABASE_PATH, } } # Internationalization # https://docs.djangoproject.com/en/1.7/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.7/howto/static-files/ STATIC_URL = '/static/' 

Soy nuevo en la encoding de Django y Python, por lo que puede haber cometido algunos errores básicos. Por favor ayuda

Sí, no funciona incluso después de usar “@cache_control”

Encontré la solución del documento para django 1.7 o posterior.

Solo ve el código de abajo

 from django.contrib.auth.decorators import login_required @login_required(login_url='/login/') def myview(request): return HttpResponse(render(request,'path_to_your_view.html')) 

@login_required decorador @login_required se utiliza para manejar el problema. Puedes consultar más en el doc.

Probé esta solución y funcionó para mí. Puse tanto @cache_control (no_cache = True, must_revalidate = True, no_store = True) como @login_required como se ve en el código a continuación.

Recuerde importar el control de cashe.

No funciona si dejo uno de estos. Trabajan juntos. Solo ve el código de abajo

 from django.contrib.auth.decorators import login_required from django.views.decorators.cache import cache_control @cache_control(no_cache=True, must_revalidate=True, no_store=True) @login_required(login_url='login') def myview(request): return HttpResponse(render(request,'path_to_your_view.html')) 

Estoy usando django 2.1 y quité las barras hacia adelante en ‘/ login /’ y usé ‘login’ en su lugar