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

如何基于Cookie实现文章10小时内仅可点赞一次的功能?

基于Cookie的文章点赞功能实现方案

核心逻辑梳理

  • 点赞记录用JSON格式存储在Cookie中,内容为当前用户已点赞的文章ID数组,可同时记录多篇文章的点赞状态
  • 每次收到点赞请求时,先解析Cookie中的点赞数组,校验当前请求的文章ID是否已存在
  • 若ID已存在,直接返回重复点赞提示,不做任何操作也不更新Cookie有效期
  • 若ID不存在,先更新数据库对应文章的like字段计数,再将当前文章ID加入点赞数组后重新写入Cookie,有效期设置为10小时

完整代码示例

以下为Laravel框架下的控制器方法实现:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;

public function articleLike(Request $request)
{
    // 从请求参数中获取待点赞的文章ID
    $articleId = $request->input('article_id');
    // 解析Cookie中的点赞记录,无记录则初始化为空数组
    $likedArticles = json_decode(Request::cookie('like'), true) ?? [];
    $validMinutes = 600;

    // 点赞校验逻辑
    if (in_array($articleId, $likedArticles)) {
        return response()->json([
            'code' => 400,
            'message' => '10小时内您已对该文章点过赞,请勿重复操作'
        ]);
    }

    // 执行数据库点赞操作
    $article = \App\Models\Article::findOrFail($articleId);
    $article->increment('like');

    // 更新点赞记录并写入Cookie
    $likedArticles[] = $articleId;
    $likeCookie = Cookie::make('like', json_encode($likedArticles), $validMinutes);

    // 响应请求时携带新Cookie
    return response()->json([
        'code' => 200,
        'message' => '点赞成功'
    ])->withCookie($likeCookie);
}

注意事项

  • Laravel框架中Cookie必须挂载到响应对象返回才会生效,单独调用Cookie设置方法不会更新用户本地Cookie
  • 上述逻辑严格匹配需求:已存在的点赞记录不会触发Cookie有效期更新,只有新点赞操作才会写入带10小时有效期的新Cookie
  • 若需防止用户手动篡改Cookie伪造点赞,可对Cookie存储的JSON内容做自定义签名校验,读取时先校验签名合法性再执行业务逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:57:04