none
Consulta sesión multiusuario Winform C# EF6 RRS feed

  • Pregunta

  • Hola gente, estoy viendo como implementar un control sobre los accesos de los usuarios en una aplicación multiusuario. Por ejemplo, si el usuario User1 se loguea en la PC1 y luego intenta ingresar desde la PC2 con la misma cuenta, la idea es darle dos opciones a: no ingresar o bien que ingrese y cierre la sesión de la otra PC. La duda me surge en cómo puedo hacer esto último, yo tenía pensado tener un campo de "activo" donde me indique si se encuentra logueado o no esa cuenta pero no se de que manera puedo hacer para que la aplicación de la PC2 se "entere" que alguien quiso entrar con esa cuenta y cerrársela (si eligió esa opción en la otra PC).  No se si será posible a través de los triggers desde la BD, alguna idea?

    Saludos

    domingo, 25 de octubre de 2020 22:46

Respuestas

  • En la base de datos, en la tabla de usuarios, puedes tener un campo que sea "equipo desde el que se logueó". Puedes obtenerlo desde programación con Environment.MachineName.

    Al hacer login, grabas el machineName y al hacer logout lo borras. Si al hacer login encuentras que el campo ya contiene el nombre de otra máquina, le ofreces al usuario las opciones que mencionabas.

    Si decide entrar, grabas el nombre de la máquina actual. Entonces, ¿qué ocurre en la otra máquina? Pues de momento, nada, pero períódicamente compruebas el valor de ese campo desde la otra máquina, y si no coincide con su propio nombre haces un logout. Hacer esto todo el rato puede ser costoso en cuanto a carga sobre la base de datos, pero puedes ser selectivo y hacer esa consulta únicamente cuando se vaya a entrar a realizar alguna operación crítica que realmente no se deba hacer sobre dos equipos.

    lunes, 26 de octubre de 2020 6:55
    Moderador

Todas las respuestas

  • En la base de datos, en la tabla de usuarios, puedes tener un campo que sea "equipo desde el que se logueó". Puedes obtenerlo desde programación con Environment.MachineName.

    Al hacer login, grabas el machineName y al hacer logout lo borras. Si al hacer login encuentras que el campo ya contiene el nombre de otra máquina, le ofreces al usuario las opciones que mencionabas.

    Si decide entrar, grabas el nombre de la máquina actual. Entonces, ¿qué ocurre en la otra máquina? Pues de momento, nada, pero períódicamente compruebas el valor de ese campo desde la otra máquina, y si no coincide con su propio nombre haces un logout. Hacer esto todo el rato puede ser costoso en cuanto a carga sobre la base de datos, pero puedes ser selectivo y hacer esa consulta únicamente cuando se vaya a entrar a realizar alguna operación crítica que realmente no se deba hacer sobre dos equipos.

    lunes, 26 de octubre de 2020 6:55
    Moderador
  • Hola Artemis Spectrum,

    ¿Alguna novedad sobre tu pregunta? ¿Han sido útiles las respuestas proporcionadas? Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice "Marcar como respuesta").

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    lunes, 26 de octubre de 2020 13:12
    Moderador