Citrix 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 a une connexion dans l’URL et chaque déconnexion de session a 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 de carte qui peut stocker chaque session active. La clé de la carte est le sessionid. La durée d’expiration de la variable est définie sur 600 secondes (10 minutes).</span>

    > add ns variable session_map -type map(text(10),ulong,100) -expires 600
    
  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
      
    • Déplacez l’entrée d’un ID de session, 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
      
  3. Créez des stratégies de répondeur pour les éléments suivants :</span>

    • Pour vérifier si une entrée de mappage existe pour ce sessionid 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("twbkwbis.P_SabanciLogin") || $session_map.valueExists(http.req.cookie.value("netsuis"))' add_session
      

      Remarque : La fonction valueExists () de la stratégie add_session_pol est considérée comme une référence à l’entrée de mappage 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 si 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
      
    • 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("twbkwbis.P_SabanciLogin") && $session_map.valueCount > 100" redirect_too_busy
      
  4. Liez les stratégies de répondeur à l’échelle mondiale.</span>

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

Cas d’utilisation : Limitation du nombre de sessions