“查看”系统 - 每个用户一次

时间:2010-03-22 19:21:37

标签: php

我需要实施“已查看”系统。

如何做到这一点,以便按F5不会增加每个用户超过1的观看次数?

SO也有这样的系统。

Cookie,会话,数据库?通常如何做?

3 个答案:

答案 0 :(得分:3)

这里需要一系列技术。需要唯一地标识每个用户(使用会话,cookie,在您的场景中最好的方法)。从那里,您需要使用用户的唯一密钥(存储在他们的cookie或会话中或其他任何密钥)维护项目的命中数据库。

当用户访问该页面时,请检查数据库以查看该用户的唯一键是否已在该页面上点击。如果没有,请添加它。无论如何,一旦完成,就从数据库中提取项目的总命中数。 Tahdah。

答案 1 :(得分:1)

只需存储在您的数据库user_idresource_id(最终timestamp)中,然后在增加viewed值之前检查SQL是否像这样:

SELECT COUNT(*) FROM ... WHERE user_id = ? AND resource_id = ? (AND timestamp > NOW() - 7 DAYS or sth)

不会返回1

答案 2 :(得分:0)

这在很大程度上取决于具体情况。例如,如果每个用户都使用用户ID登录,那么如果您正在执行不希望用户登录的启动页面,则会非常不同。

我将假设您属于后一类,并且用户未登录到您的页面。如果是这种情况,我建议使用setcookie命令设置一个cookie,这可以这样完成:

if (empty($_COOKIE['hasViewed'])) {
    //increment the total number of views in the
    //database or wherever we are storing it.
    $viewer->incrementViews();
}
//make sure they have a cookie for next time
setcookie("hasViewed", "1", time() + 60*60*24*30);

请注意,在此示例中,如果用户在30天内没有看到该页面,则该用户将能够再次增加视图。