一篇博文的阅读次数该怎么实现?
方法一
我最先想到的就是打开一次就增加一次,方法很简单,但是效果很不理想。只要在页面上每刷新一次,阅读次数就会增加一次,一个用户能让一篇文章的阅读次数没有上限的增加,这不是我想要的。
猜想
是不是需要记录客户端ip,然后判断是否同一个用户,再决定是否增加阅读次数呢?这么做成本有点高,需要缓存或者数据表来记录大量ip,还需要查询,效率也很低下。
参考了typecho一个模版的实现的方式后,我学到一招,得出了方法二
方法二
我们可以利用cookie来实现阅读次数的控制。在cookie中记录已经阅读过的文章id,用关键词分隔,然后我们后台在原先文章阅读次数增加的代码里获取这个cookie内容,分割成为一个数组,判断当前文章id是否在该数组中,不存在就增加阅读次数,最后将新的数组组成文本设置cookie覆盖。
以下是我博客用 Express.js
实现的代码
//文章阅读次数+1
let _AD_VIEWS = req.cookies._AD_VIEWS || [];
_AD_VIEWS = _AD_VIEWS.length == 0 ? _AD_VIEWS : _AD_VIEWS.split(',');
if (_AD_VIEWS.indexOf(ad.toString()) == -1) {
await articleApi.articleViewAdd(ad);
_AD_VIEWS.push(ad);
res.cookie('_AD_VIEWS',_AD_VIEWS.join(','), {});
}
暂无评论