Persistent Login

Proporciona una función "Recordarme" en el formulario de inicio de sesión que permite a los usuarios permanecer conectados entre sesiones del navegador.

persistent_login
6,032 sites
53
drupal.org

Install

Drupal 11 v2.2.4
composer require 'drupal/persistent_login:^2.2'
Drupal 10, 9 v8.x-1.10
composer require 'drupal/persistent_login:8.x-1.10'

Overview

El módulo Persistent Login implementa una funcionalidad segura de "Recordarme" para sitios Drupal. Cuando los usuarios marcan la opción "Recordarme" durante el inicio de sesión, volverán a iniciar sesión automáticamente cuando regresen al sitio, incluso después de cerrar su navegador.

A diferencia de simplemente extender la duración de la sesión PHP (lo cual es inseguro y se aplica a todos los usuarios), este módulo utiliza un enfoque seguro basado en tokens. Almacena tokens hasheados en la base de datos usando un patrón de serie/instancia, donde el valor de serie es de larga duración y el valor de instancia se actualiza con cada uso. Este enfoque ayuda a detectar el robo de tokens mientras mantiene la autenticación persistente.

El módulo está diseñado para funcionar junto con las sesiones estándar de Drupal: cuando se cierra el navegador, la sesión PHP termina, pero la cookie de inicio de sesión persistente permanece. En la próxima visita, el usuario se autentica automáticamente usando el token persistente.

Features

  • Añade una casilla "Recordarme" al formulario de inicio de sesión con etiqueta configurable
  • Autenticación segura basada en tokens usando patrón de serie/instancia (similar al enfoque descrito en "Improved Persistent Login Cookie Best Practice" de Barry Jaspan)
  • Duración del token configurable en días, con extensión opcional de la duración en cada uso
  • Número máximo configurable de tokens de inicio de sesión persistente por usuario
  • Limpieza automática de tokens expirados mediante cron
  • Los usuarios pueden ver sus inicios de sesión persistentes activos en su página de perfil
  • Invalidación automática de tokens al cambiar la contraseña con opción de cerrar sesión en todos los dispositivos
  • Los tokens se eliminan automáticamente cuando los usuarios cierran sesión, son eliminados o sus cuentas son canceladas
  • La política de solicitud de caché de página evita servir páginas en caché a usuarios con cookies de inicio de sesión persistente pendientes
  • Soporta prefijos de cookies específicos para HTTPS para mayor seguridad
  • Soporte de traducción de configuración para sitios multilingües

Use Cases

Sitios de comunidad o portales de miembros

Para sitios de comunidad o portales de miembros donde los usuarios acceden al contenido regularmente, habilitar el inicio de sesión persistente mejora la experiencia del usuario al eliminar los requisitos de inicio de sesión repetidos mientras mantiene la seguridad. Los usuarios pueden marcar "Recordarme" en sus dispositivos personales para permanecer conectados entre reinicios del navegador.

Sitios de comercio electrónico con cuentas de usuario

Las tiendas en línea con cuentas de clientes pueden usar el inicio de sesión persistente para mantener a los clientes conectados, haciendo las compras repetidas más convenientes. El límite de tokens configurable asegura que los usuarios no estén conectados en demasiados dispositivos simultáneamente.

Intranets corporativas

Para sitios internos de empresas accedidos diariamente por empleados, el inicio de sesión persistente reduce la fricción mientras la expiración automática del token asegura que las sesiones no persistan indefinidamente. La lista de tokens por usuario permite a los administradores y usuarios monitorear las sesiones activas.

Gestión de acceso multi-dispositivo

Los sitios donde los usuarios acceden desde múltiples dispositivos pueden usar el límite máximo de tokens para controlar cuántos inicios de sesión persistentes simultáneos están permitidos. Los usuarios pueden ver sus sesiones activas y los administradores pueden configurar límites apropiados.

Sitios conscientes de la seguridad con conveniencia

Los sitios que necesitan equilibrar la seguridad con la conveniencia del usuario pueden configurar duraciones de token más cortas (por ejemplo, 7 días) con extensión de duración en cada uso. Esto asegura que las sesiones inactivas expiren rápidamente mientras los usuarios activos permanecen conectados.

Tips

  • Establece la duración de la cookie de sesión en 0 en services.yml antes de habilitar el módulo para evitar advertencias en el informe de estado
  • Considera habilitar "Extender duración cuando se usa" para sitios visitados frecuentemente para mantener a los usuarios activos conectados
  • Establece un límite máximo de tokens razonable para evitar que los usuarios tengan sesiones persistentes ilimitadas
  • Usa un prefijo de cookie único si ejecutas múltiples sitios Drupal en el mismo dominio
  • Recuerda que cambiar el prefijo de cookie cerrará la sesión de todos los usuarios con sesiones persistentes
  • Los tokens de inicio de sesión persistente se almacenan de forma segura usando valores hasheados en la base de datos
  • Los usuarios pueden ver sus inicios de sesión persistentes activos en la pestaña "Inicios de sesión persistentes" de su página de perfil

Technical Details

Admin Pages 2
Persistent Login /admin/config/system/persistent_login

Configura los ajustes para la función de inicio de sesión persistente incluyendo duración del token, máximo de tokens por usuario, etiqueta del formulario de inicio de sesión y prefijo de cookie.

Inicios de sesión persistentes /user/{user}/persistent-logins

Muestra una tabla de las sesiones de inicio de sesión persistente activas del usuario, mostrando cuándo se creó cada una, cuándo se usó por última vez y cuándo expira (si la duración está configurada). Esta página es accesible como una pestaña en las páginas de perfil de usuario.

Hooks 6
hook_form_user_login_form_alter

Añade la casilla "Recordarme" al formulario de inicio de sesión y adjunta un manejador de envío para crear tokens de inicio de sesión persistente cuando está marcada.

hook_form_user_form_alter

Añade una casilla "Cerrar sesión en todos los demás dispositivos" al formulario de edición de usuario al cambiar la contraseña. Cuando está marcada junto con una nueva contraseña, se eliminan todos los tokens de inicio de sesión persistente del usuario.

hook_user_logout

Elimina el token de inicio de sesión persistente de la sesión actual cuando un usuario cierra sesión.

hook_user_cancel

Elimina todos los tokens de inicio de sesión persistente de un usuario cuando su cuenta es cancelada.

hook_user_delete

Elimina todos los tokens de inicio de sesión persistente de un usuario cuando su cuenta es eliminada.

hook_cron

Limpia los tokens de inicio de sesión persistente expirados de la base de datos durante las ejecuciones de cron.

Troubleshooting 5
Los usuarios no permanecen conectados después de reiniciar el navegador

Asegúrate de que tu archivo services.yml tenga 'session.storage.options.cookie_lifetime: 0' configurado. El módulo requiere que las cookies de sesión expiren cuando se cierra el navegador para que la cookie de inicio de sesión persistente pueda tomar el control de la autenticación.

El informe de estado muestra un error sobre la duración de la cookie de sesión

Edita el archivo services.yml de tu sitio para añadir o modificar el parámetro session.storage.options con cookie_lifetime establecido en 0, luego reconstruye la caché.

El inicio de sesión persistente no funciona detrás de Varnish u otro proxy inverso

Configura tu proxy inverso para no servir respuestas en caché para solicitudes que incluyan la cookie de inicio de sesión persistente (prefijo predeterminado 'PL' o 'SPL' para HTTPS).

Todos los usuarios fueron desconectados después de un cambio de configuración

Cambiar el prefijo de cookie invalidará todas las cookies de inicio de sesión persistente existentes. Este es el comportamiento esperado: los usuarios necesitarán iniciar sesión nuevamente y seleccionar "Recordarme".

Los tokens de usuario no se están limpiando

Asegúrate de que cron se esté ejecutando regularmente en tu sitio. La implementación de hook_cron del módulo elimina los tokens expirados de la base de datos.

Security Notes 6
  • El módulo utiliza un patrón seguro de token de serie/instancia que puede detectar el robo de tokens: si un token se usa dos veces con la misma serie pero diferente instancia, indica un posible robo
  • Los tokens se almacenan como valores hasheados en la base de datos, por lo que los valores de token sin procesar no pueden recuperarse si la base de datos es comprometida
  • El módulo elimina automáticamente todos los tokens cuando un usuario cambia su contraseña con la opción "Cerrar sesión en todos los dispositivos" marcada
  • Los tokens se invalidan automáticamente cuando los usuarios cierran sesión, son eliminados o sus cuentas son canceladas
  • Los sitios HTTPS usan un prefijo de cookie diferente (precedido con 'S') para prevenir ataques de colisión de cookies
  • La política de caché de página evita servir páginas anónimas en caché a usuarios con cookies de inicio de sesión persistente, asegurando una autenticación adecuada