Mostrar las sesiones abiertas por dispositivo y poder cerrarlas desde un panel con Laravel

Desde hace tiempo, me preguntaba cómo se podría hacer con Laravel una sección que tienen muchas webs (por ejemplo, Facebook) que consiste en un listado de todas las sesiones abiertas segun dispositivo de nuestro usuario y poder cerrarlas desde ahí mismo. Estuve investigando  y, en esta entrada, veremos cómo hacer una versión simple de esto. Haremos un listado de las sesiones y añadiremos un botón para eliminar cada sesión y así quedará inválida y, por tanto, el usuario (en ese dispositivo) no seguirá logueado.

Primero de todo vamos a cambiar el driver de sesión en el archivo .env:

Al haber cambiado esto, podremos generar las migraciones, para que nos cree una tabla para guardar las sesiones:

Ejecutamos las migraciones:

Con esto, ya tendremos la tabla donde se guardarán y eliminarán las sesiones.

Ahora vamos al código. Creamos las rutas de listar y eliminar:

También, podríamos poner este código separado en controladores, pero como ejemplo es suficiente.

Creamos la vista para listar las sesiones con el botón para eliminar. Cuando le demos al botón de eliminar, automáticamente la sesión del dispositivo quedará invalida y hará logout:

Quedaría algo así:

-


Aloja tu proyecto en DigitalOcean: Obtén $200 de crédito gratis al registrarte a través de este enlace.

Si hay cualquier tipo de error en el post o te surge cualquier duda, no dudes en ponerlo en los comentarios o enviarme un correo desde la página de contacto.

? CONTACTAR

5 comentarios en “Mostrar las sesiones abiertas por dispositivo y poder cerrarlas desde un panel con Laravel

  1. Excelente trabajo! Muchas gracias por compartirlo.
    Estoy empezando con Laravel7 (disculpa mi ignorancia). Cuando dices:
    php artisan session:table
    ¿Por qué no necesito un modelo?
    ¿Es por la diferencia de versiones y lo mismo que:
    php artisan make:model Session –migration?
    (En otras entradas el encabezado dice Laravel 5, pero en ésta no…) o
    ¿Es que todo eso cambia al configurar .env? (por defecto, SESSION_DRIVER=file
    …………….
    Aprovecho para sugerirte un temazo: cómo escribir los header http en Laravel
    Muchísimas gracias

    1. Hola Amaia! Muchas gracias por tu comentario.

      Sí, como dices, cambia cuando cambiamos el driver en el .env, creamos y ejecutamos las migraciones y Laravel ya gestiona todo lo demás. A partir de aquí, todas las sesiones se guardarán en la tabla sessions de la base de datos.

      Te paso el link de la documentación de Laravel sobre las sesiones para más información: https://laravel.com/docs/7.x/session.

      Por cierto, tomo nota de la sugerencia. Muchas gracias ?

      Espero que te ayude. Un saludo!

  2. Excelente ejemplo para administrar sesiones de diferentes dispositivos, solo tengo una duda.

    cada vez que elimino una session de otro dispositivo, desde el otro dispositivo al actualizar hace que se cree otra session en la tabla sessions pero sin user_id, en la columna user_id en null, quisera poder manejar esa parte de la session de manera global para verificar si el session()->getId() existe en la tabla sessions y que continue con el proceso sino existe entonces destruir la autenticacion y que continue con el proceso.

    si hay alguna manera de poder hacer esa validacion seria de mucha ayuda

Deja una respuesta

  Acepto la política de privacidad