Implementé recientemente el almacenamiento en caché en todo el sitio usando memcached en mi aplicación Django, establecí el TTL en unos 500 segundos e implementé caché por vista en otras partes de la aplicación web. El problema que tengo es que cuando un usuario cierra la sesión, porque es una publicación de formulario, el sitio se comporta como se esperaba, sin embargo, si se dirige a una parte del sitio protegida por contraseña, la aplicación se comporta como si todavía hubiera iniciado sesión. en, a menos que presionen "actualizar". Soy nuevo en el almacenamiento en caché y me pregunto si puedo hacer algo inteligente para evitar esto.Almacenamiento en caché en el sitio con Django: problemas con las páginas protegidas con contraseña al cerrar sesión
Respuesta
Me encontré con problemas similares. La forma estándar de Django es desactivar el caché para los usuarios autenticados.
#settings.py
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True
Funciona bien si diferentes usuarios ver diferentes páginas (ejemplo: su nombre de usuario en ellos) y no se puede tener una versión para ellos.
Pero si solo hay 2 versiones de página: para usuarios autenticados y para otros, no es bueno deshabilitar por completo la memoria caché para usuarios autenticados. Escribí un app que, además de todo, permite ajustar la memoria caché en este caso.
Actualización.
BTW: mencionó que al hacer clic en "actualizar" se recibe la versión correcta de la página. Significa que el problema es el caché del lado del cliente (cabecera Expires o E-tag), no el caché del servidor.
Para evitar el almacenamiento en caché del lado del cliente (tiene que hacer eso si tiene varias versiones de la página bajo la misma URL) use el decorador @cache_control(must_revalidate=True)
.
En la vista de una parte del sitio protegida con contraseña, ¿comprueba si el usuario está registrado o es anónimo antes de buscar los datos (y tal vez traer datos del caché)?
Deberías. Django lo ayuda, con un decorador requerido para iniciar sesión que puede colocar en la vista. Eche un vistazo a esto: http://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator
Sí, hago eso, todo tiene un decorador requerido para iniciar sesión, el problema es que el estado de inicio de sesión está almacenado en la memoria caché. –
Pero no queda claro si presiona "actualizar". –
- 1. PHP: almacenamiento en caché de las páginas con el estado
- 2. Django problemas con las contraseñas
- 3. Cómo configurar cookies al iniciar/cerrar sesión con Devise
- 4. Compartir en las páginas sociales con django
- 5. Django con problemas de almacenamiento MongoDB enchufables
- 6. Almacenamiento en caché de JSON con Cloudflare
- 7. Sitio web protegido con contraseña con JavaScript
- 8. Watin: cómo probar el sitio con las páginas emergentes
- 9. Estrategias de almacenamiento en caché con Memcached?
- 10. Almacenamiento en caché de un gran número de páginas en el sitio php
- 11. Problema al cerrar la sesión con Devise en mi aplicación
- 12. Django iniciar sesión/cerrar sesión
- 13. Problemas de almacenamiento en búfer con android.media.MediaPlayer
- 14. ¿Existe alguna manera fácil de probar páginas web protegidas con SSL en el servidor de Desarrollo, utilizando Django?
- 15. Cómo deshabilitar el almacenamiento en caché de páginas de Django/mod_WSGI
- 16. Forzar el almacenamiento en caché de imágenes con javascript
- 17. Problemas al leer las cookies en SharePoint con acceso anónimo
- 18. Problemas con el nombre de usuario o pase con dos puntos al configurar CURLOPT_USERPWD
- 19. ¿Cómo diseñar un sitio ASP.NET MVC para el almacenamiento en caché con Velocity?
- 20. Confirmando el almacenamiento en caché HTTP con Fiddler
- 21. almacenamiento en caché de proxy con el descanso autenticado solicita
- 22. Variables en páginas jsp con páginas "incluidas"
- 23. Cómo almacenar en caché con el sitio Node.js de manifiesto
- 24. Iniciar sesión manualmente en el sitio web con Typheous
- 25. Django - Caché de sitio de múltiples sitios
- 26. Problemas al autenticar al sitio web desde el código
- 27. PHP Session Destruir al cerrar sesión Botón
- 28. HttpWebRequest con almacenamiento en caché habilitado arroja excepciones
- 29. Iniciar sesión en el sitio web con java
- 30. Rails - etags frente al almacenamiento en caché de páginas (caché de archivos)
Por curiosidad, ¿funciona tu aplicación si tengo 3 versiones en lugar de dos? (Anónimo, autenticado, personal)? – Powerlord
Sí. Se puede usar para tener diferentes versiones de páginas basadas en cualquier cosa que se solicite. Esto significa que puede tener páginas o páginas en caché por usuario almacenadas en caché por atributo del usuario o páginas almacenadas en caché por las cookies. –
.. o páginas almacenadas en caché por los parámetros GET –