【问题标题】:How to not increase page/post view count with refresh?如何不通过刷新增加页面/帖子查看次数?
【发布时间】:2015-11-20 06:06:34
【问题描述】:

我在网上搜索了一种通过刷新页面来禁用帖子/页面视图“黑客”的方法,但我没有找到任何方法。

如何不通过刷新增加页面/帖子查看次数?

或不同角度的相同问题:

如何只注册唯一访问?

我目前的想法是IPnonce 但恐怕我需要一点帮助才能开始。


目前的代码超级简单:

    /* Allow devs to override the meta key used. By default, this is 'Views'. */
    $meta_key = 'estate_property_views_count';

    /* Get the number of views the post currently has. */
    $old_views = get_post_meta( $post_id, $meta_key, true );

    /* Add +1 to the number of current views. */
    $new_views = absint( $old_views ) + 1;

    /* Update the view count with the new view count. */
    update_post_meta( $post_id, $meta_key, $new_views, $old_views );

【问题讨论】:

标签: php


【解决方案1】:

方法 1 - 使用 Cookie:

您可以使用 cookie 来代替 IP。您需要先检查cookie是否存在,如果不存在则更新并设置cookie,否则不存在。

这样的事情会起作用:

if(!isset($_COOKIE['not_unique'])) {
    setcookie('not_unique', '1', time() + (86400 * 30)); //30 days
    $old_views = get_post_meta( $post_id, $meta_key, true );
    $new_views = absint( $old_views ) + 1;
    update_post_meta( $post_id, $meta_key, $new_views, $old_views );
}

方法 2 - 使用会话:

在脚本的第一行添加session_start();,然后像这样使用它:

if(!isset($_SESSION['not_unique'])) {
    $_SESSION['not_unique'] = 1;
    $old_views = get_post_meta( $post_id, $meta_key, true );
    $new_views = absint( $old_views ) + 1;
    update_post_meta( $post_id, $meta_key, $new_views, $old_views );
}

【讨论】:

  • cookie 是否被禁用不能确定(好吧,我认为禁用 cookie 的人并不多,这没什么大不了的)但是浏览器的“隐身”模式怎么样?也不行,对吧?
  • @Solo 是的,你是对的,这是最简单的解决方案,如果你想要一个更强大的解决方案,你可以做的是将每个用户的 ip 保存在数据库中,而不是在更新视图计数之前检查 ip 是否存在是否在分贝中
  • 感谢您的回答!你也熟悉会话吗?它可以以某种方式使用吗?我希望有“临时”解决方案 - 例如每 5 分钟计算一次视图,数据库对我的需求来说太过分了。
  • 用户关闭浏览器时会话被破坏
  • @madforstrength 使用 IP 计算用户并不是一个好主意,因为可能有多个用户坐在一个 IP 后面。您可以使用 Cookie 和会话来达到预期的效果。
猜你喜欢
  • 2021-11-18
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
相关资源
最近更新 更多