我需要实施“已查看”系统。
如何做到这一点,以便按F5不会增加每个用户超过1的观看次数?
SO也有这样的系统。
Cookie,会话,数据库?通常如何做?
答案 0 :(得分:3)
这里需要一系列技术。需要唯一地标识每个用户(使用会话,cookie,在您的场景中最好的方法)。从那里,您需要使用用户的唯一密钥(存储在他们的cookie或会话中或其他任何密钥)维护项目的命中数据库。
当用户访问该页面时,请检查数据库以查看该用户的唯一键是否已在该页面上点击。如果没有,请添加它。无论如何,一旦完成,就从数据库中提取项目的总命中数。 Tahdah。
答案 1 :(得分:1)
只需存储在您的数据库user_id
,resource_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天内没有看到该页面,则该用户将能够再次增加视图。