Laravel基于Session统计文章浏览量的代码工作原理咨询
这段Laravel浏览量统计代码的工作原理
这段代码核心是实现同一用户单次会话内,同一篇文章仅统计一次浏览量,避免用户反复刷新页面导致浏览量虚高,逐行逻辑解析如下:
- 第一行
$viewed = Session::get('viewed_article', []);
Laravel的Session用于存储单个用户会话周期(默认浏览器关闭前、或者未超过配置的会话有效期都算同一会话)的临时数据,这行代码就是从当前用户的会话数据中读取viewed_article字段的内容,这个字段存的是用户已经访问过的文章ID列表,如果读取不到就默认返回空数组。 - 第二行
if (!in_array($article->id, $viewed))
判断当前访问的文章ID,是否不在刚才拿到的已访问文章ID列表里,也就是判断用户是不是第一次在当前会话中访问这篇文章。 - 第三行
$article->increment('views');
如果是首次访问,就直接给当前文章对应数据库表的views字段(也就是存储浏览量的字段)数值加1,不用手动查库再更新,Laravel的increment方法封装了这一步操作。 - 第四行
Session::push('viewed_article', $article->id);
把当前文章的ID追加到会话里的viewed_article列表中,这样用户后续再刷新或者重新进入这篇文章的页面,判断的时候就会识别到已经访问过,不会再重复统计浏览量。
这个实现方式逻辑简单、性能消耗低,适合普通博客、资讯站这类对浏览量统计精度要求不高的场景。缺点是统计粒度比较粗,用户清除浏览器Cookie、换设备、或者会话过期后再次访问,还是会重新统计一次浏览量。
内容的提问来源于stack exchange,提问作者chu
相关产品推荐
相关产品推荐

