ユースケース:セッション数の制限
このユースケースでは、要件はアクティブなバックエンドセッションの数を制限することです。展開では、各セッションログインの URL にはログインがあり、各セッションログアウトには URL にログアウトがあります。ログインが成功すると、バックエンドは一意の10文字の値を持つセッションIDCookie を設定します。
このユースケースを実現するには、次の操作を実行します。
アクティブな各セッションを格納できるマップ変数を作成します。マップのキーはセッション ID です。変数の有効期限は 600 秒 (10 分) に設定されています。
> add ns variable session_map -type map(text(10),ulong,100) -expires 600
map 変数に次の代入を作成します。
セッション ID のエントリを作成し、その値を 1 に設定します (この値は使用されません)。
>添加ns作业add_session - variable sessio美元n_map[http.req.cookie.value("sessionid")]' -set 1
セッション ID のエントリを解放します。これにより、session_map の値カウントが暗黙的に減少します。
> add ns assignment delete_session -variable '$session_map[http.req.cookie.value("sessionid")]' -clear
次のレスポンダーポリシーを作成します。
HTTP リクエストにそのセッション ID のマップエントリが存在するかどうかを確認する。マップエントリが存在しない場合、add_session 割り当てが実行されます。
> add responder policy add_session_pol 'http.req.url.contains("example") || $session_map.valueExists(http.req.cookie.value("abc"))' add_session
注: add_session_pol ポリシーの valueExists () 関数は、セッションのマップエントリへの参照としてカウントされるため、各リクエストはそのセッションの有効期限タイムアウトをリセットします。10 分経過してもセッションの要求が受信されない場合、セッションのエントリの割り当ては解除されます。
セッションがいつログアウトしたかを確認する。delete_session 割り当てが実行されます。
add responder policy delete_session_pol "http.req.url.contains("Logout")" delete_session
ログイン要求があるかどうか、およびアクティブなセッションの数が100を超えているかどうかを確認する。これらの条件が満たされると、セッション数を制限するために、ユーザーはサーバーがビジーであることを示すページにリダイレクトされます。
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
レスポンダーポリシーをグローバルにバインドします。
bind responder global add_session_pol 30 next bind responder global delete_session_pol 10 bind responder global check_login_pol 20