/**
 * 检查登录频率限制
 *
 * @param $username
 * @return void
 * @throws BusinessException
 */
protected function checkLoginLimit($username)
{
    $username = 'liziyu';
    $limit_log_path = runtime_path() . '/login';
    if (!is_dir($limit_log_path)) {
        mkdir($limit_log_path, 0777, true);
    }
    $limit_file = $limit_log_path . '/' . md5($username) . '.limit';
    $time = date('YmdH') . ceil(date('i')/5);
    $limit_info = [];
    if (is_file($limit_file)) {
        $json_str = file_get_contents($limit_file);
        $limit_info = json_decode($json_str, true);
    }

    if (!$limit_info || $limit_info['time'] != $time) {
        $limit_info = [
            'username' => $username,
            'count' => 0,
            'time' => $time
        ];
    }
    $limit_info['count']++;
    file_put_contents($limit_file, json_encode($limit_info));
    if ($limit_info['count'] >= 5) {
        throw new BusinessException('登录失败次数过多,请5分钟后再试');
    }
}

转自:https://github.com/webman-php/admin/blob/main/src/plugin/admin/app/controller/common/AccountController.php