【问题标题】:How to implement unique hits on articles如何对文章实施独特的点击
【发布时间】:2010-12-20 17:16:24
【问题描述】:

我想知道为文章、产品等实现命中计数器的最佳方法是什么。现在,如果有人访问该页面,计数器只会在数据库中添加一个。如果有人刷新页面,它会持续计数、误导性结果以及不必要的读取、写入。

我正在考虑存储他们的 ip,但我不知道如何在 mysql 中对此进行建模。如果我为每次点击创建一个数据库记录,那将是巨大的。

我读过这篇文章: How to write an efficient hit counter for websites

最好的答案是使用日志,然后将此日志更新到 db。但话又说回来了。

确定新命中的最佳方法是使用 IP 还是其他变量。再次记录特定用户的点击的可接受时间是多少。

也欢迎任何其他类型的实现。

【问题讨论】:

    标签: php database algorithm session cookies


    【解决方案1】:

    我想我会简单地使用他们的会话 ID 来检查。会话 id 很容易获得,无需进行数据库访问即可检索它。我可以接受的时间将是他们的下一次会议。在他们的会话中,我会跟踪他们点击的页面。这样一来,数据库中就没有什么需要检查的了,并且当会话结束时,数据也会消失。

    【讨论】:

    • 不错的方法,我从没想过使用会话ID。尽管在我的情况下这不是一个选项,但会话 ID 会不时更改。但我一定会在以后的项目中记住这一点
    • 会话 id 的另一个问题是我可以打开 firefox、opera、safari、ie 和 chrome 并填充我的数字,或者,编写一个自动连接的程序,转到正确的文章,然后重新开始,使用一个新会话,因为它实际上并没有保存 cookie,只是假装使用 htmlunit。
    【解决方案2】:

    您也可以只存储 IP 地址和您首次登录的时间,并且仅在时间足够长(可能是 30 分钟)时增加,然后也增加与 IP 地址相关的时间。

    【讨论】:

    • 感谢您的拼写,对此深表歉意。很好的答案,我想我可以在我的网站上使用这种方法。尽管我仍然有疑问是将其写入日志还是直接写入数据库更好。我读的文章建议最好写入日志,因为不会有数据库锁。
    • 我会使用数据库,就像使用日志一样,那么您在解析时会遇到问题。这应该是一个非常快速的查找,因为您可以将它放入带有日期时间索引的表中。如果您担心使用触发器,请传入 ip addr 和页面/文章,然后让触发器做出决定。
    【解决方案3】:

    最简单的方法:当用户第一次访问时,增加计数器并向他们发送一个cookie。如果您检测到 cookie,请不要增加计数器。

    【讨论】:

      【解决方案4】:

      这很棘手。真的不可能做到 100% 正确:

      1. 如果您依赖 cookie,当它们被删除(1)、expire(1) 或当它们被禁用(2) 时会发生什么?
      2. 如果您依赖 IP,那些通过代理访问您的站点的人会发生什么情况?有足够多的公司和 ISP 让用户只通过代理 (3) 和/或 (1)
      3. 会话 ID:当它作为 cookie 存储时,请参见 1。如果不是,则每次用户访问您的站点时都会重置它,而无需设置会话 ID GET/POST 参数 set(1)(如果会话始终通过身份验证过程绑定到用户,则情况不同)李>

      最常见的实现是使用 cookie。请记住它并不完美。

      (1) 您将获得来自同一用户的多次点击
      (2) 您将从同一用户获得大量点击,除非您以不同方式处理不允许使用 cookie 的客户端
      @ 987654329@你只会得到多个用户的一次点击

      【讨论】:

        猜你喜欢
        • 2010-11-25
        • 1970-01-01
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多