none
COMO VALIDAR QUE UN USUARIO SOLO INGRESE UNA SOLA VEZ A MI SITIO WEB ASP.NET. RRS feed

  • Pregunta

  • Buenas 

    Hay alguna manera de controlar que un usuario solo pueda ingresar una sola vez a mi aplicación, este donde sea, Por ejemplo si inicio sesión en un celular, que no deje ingresar nuevamente desde otro celular o desde cualquier otro dispositivo.

    He intentado validando con BD, Pero el timeout hay veces en que no cierra la sesión y no me actualiza el estado en la BD y por ende no me deja ingresar.

    Habra alguna forma que independientemente que el usuario este o no utilizando la aplicación me actualice el estado en la BD.

    Agradecería su ayuda Gracias. 

    viernes, 9 de septiembre de 2016 23:12

Respuestas

  • Hay un problema en la definición de "entrar una sola vez" y "el usuario este o no utilizando la aplicación". Estás pensando en una aplicación de escritorio, en la que la aplicación "está en uso" cuando está abierta en pantalla.

    Pero las aplicaciones web son desconectadas, es decir, desde un navegador se envía una petición al servidor, el servidor construye un HTML, y lo devuelve al navegador. Eso tarda una milésima de segundo, y la conexión se cierra, y el servidor se olvida por completo del usuario. El usuario solo estuvo usando la aplicación una milésima de segundo, y ya terminó y en el servidor no hay nada conectado a ese usuario. Desde luego, ese HTML que recibió el usuario puede estarse viendo en un navegador y la pantalla del navegador seguir abierta durante horas. Pero eso el servidor no lo sabe, no le llega nada que le diga si el navegador está abierto o no.

    Así que lo que tuenes que limitar no es si está o no está en uso, sino "cuánto tiempo pasó desde que se recibió una petición desde ese navegador", y asignar un timeout, y considerar que "ya no está en uso" cuando no se haya recibido nada durante un tiempo prudencial (por ejemplo, 10 minutos).

    Eso se puede conseguir con una cookie. Genera un identificador único (Guid) y pásalo a una cookie, y salva una copia en el servidor junto con la hora a la que lo generaste. Cuando te llegue una petición del navegador, comparas ese Guid con el que le enviaste al usuario cuando hizo login, y mientras siga siendo el mismo, consideras que está en el mismo navegador. Si te llega una petición sin Guid consideras que es otro navegador distinto. La fecha y hora las usas para comprobar si ha pasado mucho tiempo desde la última vez, en cuyo caso presumes que se le ha cerrado el navegador y ya no tiene abierto el último. Y si te llega un Guid distinto, entonces presumes que mantiene abiertos dos navegadores y cada uno tiene un Guid en su cookie.

    sábado, 10 de septiembre de 2016 7:49

Todas las respuestas

  • Hay un problema en la definición de "entrar una sola vez" y "el usuario este o no utilizando la aplicación". Estás pensando en una aplicación de escritorio, en la que la aplicación "está en uso" cuando está abierta en pantalla.

    Pero las aplicaciones web son desconectadas, es decir, desde un navegador se envía una petición al servidor, el servidor construye un HTML, y lo devuelve al navegador. Eso tarda una milésima de segundo, y la conexión se cierra, y el servidor se olvida por completo del usuario. El usuario solo estuvo usando la aplicación una milésima de segundo, y ya terminó y en el servidor no hay nada conectado a ese usuario. Desde luego, ese HTML que recibió el usuario puede estarse viendo en un navegador y la pantalla del navegador seguir abierta durante horas. Pero eso el servidor no lo sabe, no le llega nada que le diga si el navegador está abierto o no.

    Así que lo que tuenes que limitar no es si está o no está en uso, sino "cuánto tiempo pasó desde que se recibió una petición desde ese navegador", y asignar un timeout, y considerar que "ya no está en uso" cuando no se haya recibido nada durante un tiempo prudencial (por ejemplo, 10 minutos).

    Eso se puede conseguir con una cookie. Genera un identificador único (Guid) y pásalo a una cookie, y salva una copia en el servidor junto con la hora a la que lo generaste. Cuando te llegue una petición del navegador, comparas ese Guid con el que le enviaste al usuario cuando hizo login, y mientras siga siendo el mismo, consideras que está en el mismo navegador. Si te llega una petición sin Guid consideras que es otro navegador distinto. La fecha y hora las usas para comprobar si ha pasado mucho tiempo desde la última vez, en cuyo caso presumes que se le ha cerrado el navegador y ya no tiene abierto el último. Y si te llega un Guid distinto, entonces presumes que mantiene abiertos dos navegadores y cada uno tiene un Guid en su cookie.

    sábado, 10 de septiembre de 2016 7:49
  • mmm lo que pasa es que lo estoy trabajando con una BD, y ahi mediante un parámetro valido y actualizo el estado, pero hay tantas formas de que un navegador se cierre... ya sea en móvil, tablet o pc , y ahí hay veces en que no actualiza el estado. La cuestión es que quiero controlar que si tengo 4 usuarios, solo puede ingresar cada uno solo una vez a la aplicación.
    sábado, 10 de septiembre de 2016 15:49