ADC

Caso de uso: Limitar la cantidad 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 “login” en la URL y cada cierre de sesión tiene “logout” en la URL. Al iniciar sesión correctamente, el backend establece una cookie de ID de sesión con un valor único de 10 caracteres.

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

  1. Cree una variable de asignación que pueda almacenar cada sesión activa. La clave del mapa es el sessionid. 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
    <!--NeedCopy-->
    
  2. Cree las siguientes asignaciones para la variable de asignación:</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
       <!--NeedCopy-->
      
    • Desasignar la entrada de un ID de sesión, lo que disminuye implícitamente el recuento de valores de session_map.</span>

       > add ns assignment delete_session -variable '$session_map[http.req.cookie.value("sessionid")]' -clear
       <!--NeedCopy-->
      
  3. Cree directivas de respuesta 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("example") || $session_map.valueExists(http.req.cookie.value("abc"))' add_session
       <!--NeedCopy-->
      

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

    • 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
       <!--NeedCopy-->
      
    • Para comprobar si hay solicitudes de inicio de sesión y si el número de sesiones activas supera las 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("example") && $session_map.valueCount > 100" redirect_too_busy
       <!--NeedCopy-->
      
  4. Vincular las directivas de respuesta de forma global</span>

    bind responder global add_session_pol 30 next
    bind responder global delete_session_pol 10
    bind responder global check_login_pol 20
    <!--NeedCopy-->
    
Caso de uso: Limitar la cantidad de sesiones

En este artículo