ADC

Cas d’utilisation : limitation du nombre de sessions

Dans ce cas d’utilisation, il est nécessaire de limiter le nombre de sessions backend actives. Dans le déploiement, chaque connexion de session possède un identifiant dans l’URL et chaque déconnexion de session possède une déconnexion dans l’URL. En cas de connexion réussie, le backend définit un cookie sessionid avec une valeur unique de 10 caractères.

Pour réaliser ce cas d’utilisation, effectuez les opérations suivantes :

  1. Créez une variable cartographique qui peut stocker chaque session active. La clé de la carte est le sessionid. Le délai d’expiration de la variable est défini sur 600 secondes (10 minutes).</span>

    > add ns variable session_map -type map(text(10),ulong,100) -expires 600
    <!--NeedCopy-->
    
  2. Créez les affectations suivantes pour la variable de carte :</span>

    • Créez une entrée pour le sessionid et définissez cette valeur sur 1 (cette valeur n’est pas réellement utilisée).</span>

       > add ns assignment add_session -variable '$session_map[http.req.cookie.value("sessionid")]' -set 1
       <!--NeedCopy-->
      
    • Désallouez l’entrée pour un ID de session, ce qui décrémente implicitement le nombre de valeurs pour session_map.</span>

       > add ns assignment delete_session -variable '$session_map[http.req.cookie.value("sessionid")]' -clear
       <!--NeedCopy-->
      
  3. Créez des stratégies de répondeur pour les éléments suivants :</span>

    • Pour vérifier si une entrée de carte existe pour cet ID de session dans la requête HTTP. L’affectation add_session est exécutée si l’entrée de carte n’existe pas.</span>

       > add responder policy add_session_pol 'http.req.url.contains("example") || $session_map.valueExists(http.req.cookie.value("abc"))' add_session
       <!--NeedCopy-->
      

      Remarque : La fonction valueExists() de la stratégie add_session_pol compte comme une référence à l’entrée de map de la session, de sorte que chaque requête réinitialise le délai d’expiration de sa session. Si aucune demande de session n’est reçue après 10 minutes, l’entrée de la session sera désallouée.

    • Pour vérifier quand la session est déconnectée. L’affectation delete_session est exécutée.</span>

       add responder policy delete_session_pol "http.req.url.contains("Logout")" delete_session
       <!--NeedCopy-->
      
    • Pour vérifier les demandes de connexion et si le nombre de sessions actives dépasse 100. Si ces conditions sont remplies, afin de limiter le nombre de sessions, l’utilisateur est redirigé vers une page indiquant que le serveur est occupé.</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. Liez les politiques du répondeur globalement.</span>

    bind responder global add_session_pol 30 next
    bind responder global delete_session_pol 10
    bind responder global check_login_pol 20
    <!--NeedCopy-->
    
Cas d’utilisation : limitation du nombre de sessions