Caso de uso: Limitación del número de sesiones

En este caso de uso, el requisito es limitar el número de sesiones de backend activas. En la implementación, cada inicio de sesión tiene inicio de sesión en la URL y cada cierre de sesión tiene cierre de sesión en la URL. En el inicio de sesión correcto, el back-end establece una cookie sessionid con un valor único de 10 caracteres.

Para lograr este caso de uso, realice las siguientes operaciones:

  1. Cree una variable de mapa que pueda almacenar cada sesión activa. La clave del mapa es el sessiónido. El tiempo de caducidad de la variable se establece en 600 segundos (10 minutos).</span>

    > add ns variable session_map -type map(text(10),ulong,100) -expires 600
    
  2. Cree las siguientes asignaciones para la variable de mapa:</span>

    • Cree una entrada para el sessionid y establezca ese valor en 1 (este valor no se usa realmente).</span>

       > add ns assignment add_session -variable '$session_map[http.req.cookie.value("sessionid")]' -set 1
      
    • Desasignar la entrada para un ID de sesión, que disminuye implícitamente el recuento de valores para session_map.</span>

       > add ns assignment delete_session -variable '$session_map[http.req.cookie.value("sessionid")]' -clear
      
  3. Cree directivas de Responder para lo siguiente:</span>

    • Para comprobar si existe una entrada de mapa para ese sessionid en la solicitud HTTP. La asignación add_session se ejecuta si la entrada de mapa no existe.</span>

       > add responder policy add_session_pol 'http.req.url.contains("twbkwbis.P_SabanciLogin") || $session_map.valueExists(http.req.cookie.value("netsuis"))' add_session
      

      Nota: La función valueExists () de la directiva add_session_pol cuenta como una referencia a la entrada de mapa de la sesión, por lo que cada solicitud restablece el tiempo de espera de caducidad de su sesión. Si no se recibe ninguna solicitud para una sesión después de 10 minutos, la entrada de la sesión se desasigna.

    • Para comprobar cuándo se cierra la sesión. Se ejecuta la asignación delete_session.</span>

       add responder policy delete_session_pol "http.req.url.contains("Logout")" delete_session
      
    • Para comprobar si hay solicitudes de inicio de sesión y si el número de sesiones activas supera 100. Si se cumplen estas condiciones, para limitar el número de sesiones, se redirige al usuario a una página que indica que el servidor está ocupado.</span>

       add responder action redirect_too_busy redirect "/too_busy.html"
       add responder policy check_login_pol "http.req.url.contains("twbkwbis.P_SabanciLogin") && $session_map.valueCount > 100" redirect_too_busy
      
  4. Enlazar las directivas de respuesta globalmente.</span>

    bind responder global add_session_pol 30 next
    bind responder global delete_session_pol 10
    bind responder global check_login_pol 20
    

Caso de uso: Limitación del número de sesiones