You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中基于Cookie实现文章10小时内不可重复点赞功能

基于Cookie的文章点赞限制实现方案

实现逻辑说明

  • Cookie中存储的like字段采用逗号分隔的文章ID字符串格式,方便存取多条已点赞文章的记录
  • 核心校验流程:
    1. 读取Cookie中已点赞的文章ID列表
    2. 校验当前请求的文章ID是否在列表中
    3. 不存在则执行点赞+新增Cookie记录,存在则直接返回不做操作

完整代码示例

// 1. 从请求中获取当前要点赞的文章ID,可根据你实际的参数名调整
$articleId = request()->input('article_id');
// 2. 读取已点赞Cookie记录
$likes = Request::cookie('like');
// 3. 转为已点赞文章ID数组,Cookie不存在时默认空数组
$likedArticles = !empty($likes) ? explode(',', $likes) : [];
$minutes = 600;

// 4. 校验是否已点赞
if (!in_array($articleId, $likedArticles)) {
    // 未点赞:执行点赞操作,对应文章like字段+1,替换为你自己的模型类名即可
    \App\Models\Article::where('id', $articleId)->increment('like');
    
    // 把当前文章ID加入已点赞列表
    $likedArticles[] = $articleId;
    // 转成逗号分隔字符串准备写入Cookie
    $newLikesStr = implode(',', $likedArticles);
    
    // 5. 设置新Cookie,两种常用写法选其一即可
    // 写法1:用Cookie队列,后续任意响应都会自动带上该Cookie
    \Cookie::queue('like', $newLikesStr, $minutes);
    // 写法2:直接返回响应的场景,用withCookie绑定
    // return response()->json(['code' => 0, 'msg' => '点赞成功'])->withCookie(cookie('like', $newLikesStr, $minutes));
} else {
    // 已点赞:直接返回提示,不更新Cookie有效期
    // return response()->json(['code' => 1, 'msg' => '您已经点赞过该文章,10小时后可再次点赞']);
}

注意事项

  • 基于Cookie的点赞限制属于前端可控的限制方案,用户清空Cookie、切换浏览器/无痕模式可绕过,对防刷要求高的场景需要配合IP、用户账号等维度做多层校验
  • Cookie单条存储上限约4KB,按每个文章ID占5位计算可存储近千条点赞记录,10小时有效期内完全够用
  • 如果你的项目开启了Laravel默认的Cookie加密,无需额外处理,框架会自动完成加解密逻辑

内容的提问来源于stack exchange,提问作者user16993770

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:54:03