阅读(321)评论(3)

一篇博文的阅读次数该怎么实现?

方法一

我最先想到的就是打开一次就增加一次,方法很简单,但是效果很不理想。只要在页面上每刷新一次,阅读次数就会增加一次,一个用户能让一篇文章的阅读次数没有上限的增加,这不是我想要的。

猜想

是不是需要记录客户端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(','), {});
    }

发表评论

评论

暂无评论

    本日の格言
    博主闪亮登场!

    不要停止奔跑,不要回顾来路,来路无可眷恋,值得期待的只有前方。
    by 马男波杰克

    超想说
    博主の友人
    对!就是这种低调,如同吃了炫迈
    超有爱
    TOP