ADC

ユースケース:セッション数の制限

このユースケースでは、要件はアクティブなバックエンドセッションの数を制限することです。展開では、各セッションログインの URL にはログインがあり、各セッションログアウトには URL にログアウトがあります。ログインが成功すると、バックエンドは一意の 10 文字の値を持つ sessionid Cookie を設定します。

このユースケースを実現するには、次の操作を実行します。

  1. アクティブな各セッションを格納できるマップ変数を作成します。マップのキーはセッション ID です。変数の有効期限は 600 秒 (10 分) に設定されています。</span>

    > add ns variable session_map -type map(text(10),ulong,100) -expires 600
    <!--NeedCopy-->
    
  2. map 変数に次の代入を作成します。</span>

    • sessionid のエントリを作成し、その値を 1 に設定します (この値は実際には使用されません)。</span>

       > add ns assignment add_session -variable '$session_map[http.req.cookie.value("sessionid")]' -set 1
       <!--NeedCopy-->
      
    • セッション ID のエントリを解放します。これにより、session_map の値カウントが暗黙的に減少します。</span>

       > add ns assignment delete_session -variable '$session_map[http.req.cookie.value("sessionid")]' -clear
       <!--NeedCopy-->
      
  3. 次のレスポンダーポリシーを作成します。</span>

    • HTTP リクエストにそのセッション ID のマップエントリが存在するかどうかを確認する。add_session 割り当ては、マップエントリが存在しない場合に実行されます。</span>

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

      注: add_session_pol ポリシーの valueExists () 関数は、セッションのマップエントリへの参照としてカウントされるため、各リクエストはそのセッションの有効期限タイムアウトをリセットします。10 分経過してもセッションの要求が受信されない場合、セッションのエントリの割り当ては解除されます。

    • セッションがいつログアウトしたかを確認する。delete_session 割り当てが実行されます。</span>

       add responder policy delete_session_pol "http.req.url.contains("Logout")" delete_session
       <!--NeedCopy-->
      
    • ログイン要求があるかどうか、およびアクティブなセッションの数が100を超えているかどうかを確認する。これらの条件が満たされると、セッション数を制限するために、ユーザーはサーバーがビジーであることを示すページにリダイレクトされます。</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. レスポンダーポリシーをグローバルにバインドします。</span>

    bind responder global add_session_pol 30 next
    bind responder global delete_session_pol 10
    bind responder global check_login_pol 20
    <!--NeedCopy-->
    
ユースケース:セッション数の制限

この記事の概要