ADC

用例:限制会话数

在此使用案例中,要求限制活动后端会话的数量。在部署中,每个会话登录在 URL 中都有登录,每个会话注销都在 URL 中注销。成功登录后,后端将设置一个具有唯一十个字符值的会话 ID cookie。

要实现此用例,请执行以下操作:

  1. 创建一个可以存储每个活动会话的地图变量。映射的键是会话 ID。变量的到期时间设置为 600 秒(10 分钟)。</span>

    > add ns variable session_map -type map(text(10),ulong,100) -expires 600
    <!--NeedCopy-->
    
  2. 为地图变量创建以下分配:</span>

    • 为会话 ID 创建一个条目,并将该值设置为 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-->
    
用例:限制会话数