第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

體育直播系統(tǒng)積分流水與風(fēng)控開發(fā):防刷、防偽與限頻實現(xiàn)

標(biāo)簽:
PHP

本案例分享介绍的是 “东莞梦幻网络科技”体育直播系统的积分流水与风控策略设计,并附上核心实现思路和部分示例代码(基于 ThinkPHP + MySQL + Redis + WebSocket 等技术栈)。从三个层面讲:防刷、防伪、限频。


一、设计目标

  1. 积分流水透明可追溯

    • 每笔积分变动都有记录,包括来源、用途、时间、设备、IP 等。
  2. 防刷策略

    • 防止用户通过刷接口、重复任务、外挂程序获取积分。
  3. 限频控制

    • 对日任务、签到、分享、趣猜等操作设置频率限制。
  4. 防伪与设备识别

    • 通过设备指纹、IP、账号行为分析,检测异常积分行为。

二、防刷策略

1. 接口频率控制

  • 对敏感接口(签到、分享、趣猜)进行 接口请求限流
  • 可使用 Redis 计数器和过期时间实现:
// 每日签到积分限额示例
function canAddPoints($userId, $taskType) {
    $redisKey = "points:{$userId}:{$taskType}:" . date('Ymd');
    $maxDaily = 1; // 每日签到1次积分
    $current = \think\facade\Cache::get($redisKey) ?? 0;

    if ($current >= $maxDaily) {
        return false;
    }
    return true;
}

function addPoints($userId, $taskType, $points) {
    if (!canAddPoints($userId, $taskType)) {
        return false;
    }
    // 写入积分流水
    Db::name('points_log')->insert([
        'user_id' => $userId,
        'task_type' => $taskType,
        'points' => $points,
        'ip' => request()->ip(),
        'device' => request()->header('User-Agent'),
        'created_at' => time(),
    ]);

    // 更新Redis计数
    $redisKey = "points:{$userId}:{$taskType}:" . date('Ymd');
    \think\facade\Cache::inc($redisKey, 1, 86400); // 设置过期1天

    return true;
}

2. 设备与IP识别

  • 防止同一用户在多设备、多账号刷积分:

    • 设备指纹:浏览器指纹、设备ID、MAC 地址(App 端)
    • IP 黑名单:短时间内同 IP 大量请求限制
function isDeviceNormal($userId) {
    $device = request()->header('User-Agent');
    $ip = request()->ip();
    
    // 检测设备同日重复行为
    $cacheKey = "device_check:{$device}:" . date('Ymd');
    $count = \think\facade\Cache::get($cacheKey) ?? 0;
    if ($count > 5) return false;

    \think\facade\Cache::inc($cacheKey, 1, 86400);
    return true;
}

3. 行为分析防刷

  • 短时间完成不合理数量的任务 → 标记为风险
  • 异常积分操作 → 暂停账号或人工复审
function riskCheck($userId, $taskType) {
    $logs = Db::name('points_log')
        ->where('user_id', $userId)
        ->where('task_type', $taskType)
        ->where('created_at', '>=', strtotime('-1 hour'))
        ->count();
    
    if ($logs > 10) { // 1小时超过10次任务积分异常
        Db::name('user')->where('id', $userId)->update(['status' => 2]); // 账号冻结
        return false;
    }
    return true;
}

三、积分流水与溯源

  • 数据库设计
CREATE TABLE `points_log` (
    `id` bigint unsigned NOT NULL AUTO_INCREMENT,
    `user_id` bigint unsigned NOT NULL,
    `task_type` varchar(50) NOT NULL,
    `points` int NOT NULL,
    `ip` varchar(50),
    `device` varchar(255),
    `remark` varchar(255),
    `created_at` int NOT NULL,
    PRIMARY KEY (`id`),
    INDEX(`user_id`),
    INDEX(`task_type`),
    INDEX(`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • 特点

    • 每笔积分都可追溯来源、设备、IP、时间
    • 结合 Redis 限流防刷

四、限频设计

类型 限制策略
每日签到 每天 1 次
分享任务 每小时 1 次
趣猜比分 每场比赛 1 次
充值返积分 单日上限 500
  • 可使用 Redis 哈希表 + 过期时间实现日限额
  • 结合 消息队列 异步更新积分,减少并发风险
// Redis 哈希记录每日积分上限
$redisKey = "daily_points_limit:{$userId}:" . date('Ymd');
$current = \think\facade\Cache::hGet($redisKey, $taskType) ?? 0;
$limit = 100;

if ($current + $points > $limit) {
    return false; // 超过日限额
}
\think\facade\Cache::hSet($redisKey, $taskType, $current + $points);

五、总结思路

  1. 防刷

    • 接口频率限制、设备指纹、IP 检测、行为分析
  2. 防伪

    • 积分流水可追溯、消息队列异步写日志、异常标记
  3. 限频

    • 日限额、每小时次数限制、比赛/任务限制
  4. 积分系统核心

    • MySQL 存储历史流水,Redis 做实时频率统计
    • 结合 WebSocket 或消息队列异步推送积分更新
點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消