2009-04-08 15 views
7

¿Cómo puedo limitar el número de usuarios a una aplicación web?Limitar el número de usuarios que acceden a una aplicación web ASP .NET

Es posible que desee limitar la aplicación web para que solo administre aproximadamente 20 usuarios a la vez. Nuestra empresa vende aplicaciones basadas en varias licencias, pero no estamos seguros de cuál podría ser el comportamiento en una aplicación web.

He visto algunas sugerencias que dicen que puede marcar una cuenta de usuario como "LoggedIn = True" cuando un usuario ha iniciado sesión. Luego, cada nuevo intento de inicio de sesión exitoso comprueba el número de registros "LoggedIn = True". Si excede el límite, entonces el usuario es rechazado.

¿Cómo se manejarán las entradas inesperadas en este caso? ¿Qué pasa si:

  • El usuario no hace clic cierre de sesión, y se cierra el navegador
  • se bloquea el navegador, y el usuario no recibe la oportunidad de hacer logout
  • rompe la conexión de red, electricidad en el cliente se apaga, etc.

Todo lo anterior seguirá teniendo el indicador "LoggedIn = True" establecido y contribuirá a la cantidad de usuarios conectados. Esto puede bloquear involuntariamente usuarios autenticados genuinos.

Estoy buscando más soluciones de ASP.NET si es posible.

Respuesta

4

Suponiendo que su autenticación de usuario se basa en sesiones, la respuesta a todos sus casos "inesperados" (que en realidad será la norma -la gente rara vez parece desconectarse de las aplicaciones web) será que esas ranuras de usuario se vuelvan libres cuando la sesión expira. Por lo tanto, necesitaría investigar los patrones de uso de su aplicación. Si logras que mucha gente inicie sesión durante un par de minutos, pero no más que eso, entonces un tiempo de espera de 30 minutos significaría que muy pocas personas llegarían a utilizar la aplicación.

El problema fundamental es que las aplicaciones web están inherentemente desconectadas, por lo que no puede controlar lo que un usuario está haciendo realmente entre las solicitudes de una página. Normalmente, vendería licencias para esa aplicación para usuarios específicos (de modo que si una empresa compra 20 licencias, eso les daría 20 nombres de usuario y contraseñas). Entonces podría evitar múltiples inicios de sesión con el mismo nombre de usuario y contraseña, ya sea rechazando el segundo inicio de sesión o desactivando el anterior (que probablemente sea el mejor enfoque en caso de que alguien realmente se haya movido de una máquina a otra sin desconectarse de una de los motivos que describes).

+0

En realidad, estábamos tratando de evitar depender de los tiempos de espera, pero probablemente no haya otra solución. Gracias por la respuesta tan rápida. –

1

La solución más común es tener un temporizador de actividad. Puede suponer que un usuario activo hará al menos una solicitud dentro de una "X" cantidad de tiempo, digamos 5 minutos más o menos.

Puede aplicar esto poniendo una solicitud asincrónica estilo ajax desencadenada de un temporizador que se inicia cuando se carga la página. Por ejemplo, si supone que todos los usuarios activos harán al menos 1 pedido cada minutos, cada página solicitará una página vacía (pero sin memoria caché) cada minutos. De esta forma, siempre que tengan abierta la ventana del navegador, siempre tendrás actividad de ese usuario. Nuevamente, esto es manejado por solicitudes asincrónicas, no por ningún tipo de directiva de recarga. Esto lo hace absolutamente transparente para el usuario.

Como una ventaja adicional, fíjate si puedes hacer que esa solicitud ajax muestre cierta información útil, en lugar de simplemente aplicar las limitaciones de licencia.

+0

Tylerl: ¿No evitaría esta solución un tiempo de espera de sesión real? Quiero decir, si un usuario mantiene su navegador abierto pero no hace nada en la aplicación web, nunca será desconectado, incluso si alcanza los 30 min. límite de tiempo de espera, ¿verdad? –

+0

Puede funcionar como lo desee. Después de 30 minutos con la sentada, ¿SUPONE el tiempo de espera o no? Puede codificar que suceda de cualquier manera. Recuerde, puede poner la URL keep-alive fuera del ámbito normal de la gestión de la sesión. Sin embargo, este no es un proyecto "principiante". – tylerl

+0

Sí, se supone que debe superar el tiempo de espera después de 30 min. Entiendo que para que funcione de esta manera, tengo que enviar la solicitud ajax fuera del alcance de mi aplicación web. ¿O hay alguna otra forma de evitar que esta solicitud restablezca el temporizador de la sesión? –

0

Como David señala el problema principal es diferenciar entre usuarios inactivos y usuarios que han abandonado su aplicación.

Una posible solución sería mantener un tiempo de espera de sesión bajo (digamos 1 o 2 minutos) y usar una función de devolución de llamada para mantener la sesión activa para los usuarios inactivos. Luego puede incrementar un contador en Session_Start y disminuirlo en Session_End y usarlo para realizar un seguimiento del número de sesiones activas. Si el número de sesiones activas supera su límite, redirigirá al nuevo usuario a una página que abandona la sesión y le dice que tiene demasiados visitantes en este momento.

Cuestiones relacionadas