我正在开展一个项目,其中只有帖子标题显示在主页上,点击标题后,完整帖子会加载到另一页<a href="posts.php?postId=<?php echo $row['posts_id'] ?>"><?php echo $row['title']; ?></a>
代码中:
hits
现在要计算发布视图,我的posts
表格中有一列hits
,最初0
的值设置为hits
,每当帖子打开时,值为posts.php
增加了1,因此我的代码位于$id = $_GET['postId'];
$sql = "UPDATE posts SET hits = hits + 1 WHERE post_id = $id";
ContactTable
但是,这对于跟踪帖子视图不是一个好习惯,因为每当刷新页面时视图都会增加。我想要一个干净的系统来跟踪帖子视图,其中每个不同的用户或访问者视图增加一个,而不管同一用户/访问者查看相同帖子的次数(如在stackoverflow中)。就像通过他们的IP地址或其他东西跟踪他们一样,只是一个想法(这些人如何做)或者这些东西是如何运作的,这足以让我开始工作。
答案 0 :(得分:2)
你无法如此简单地解决问题。您的问题在于计算查看页面的唯一用户(可能是时间组件)。您有几个问题,如评论中所述。首先是确定你在做什么。对于原型,IP地址和其他任何东西一样好。但是,它有许多缺点,你需要认真考虑识别“访客”。
有一种方法可以在SQL中解决您的问题。但是,它需要在帖子/访问者级别增加一个表。每个组合将有一行,然后您需要从那里计算。要快速获取唯一计数,您需要在该表上插入触发器。
以下是代码草图:
create unique index unq_postvisitors_post_visitor on postvisitors(postid, visitorid);
insert into PostVisitors (postid, visitorid)
select $postid, $visitorid
on duplicate key update set counter = counter + 1;
delimiter $$
create trigger trig_PostVisitors
after insert on PostVisitors
begin
update posts
set numvisitors = numvisitors + 1
where posts.post_id = new.post_id;
end;$$
delimiter ;
答案 1 :(得分:1)
我用来解决这个问题的最简单方法是通过cookies。
每当您的网页被打开时,您都会检查是否通过cookie_name
设置了isset($_COOKIE[$cookie_name])
Cookie。
如果isset返回false,则通过setcookie(cookie_name, value, expire);
设置cookie,也可以将expire time设置为24h(必须以秒为单位设置,因此24h为84600)。此外,您还可以通过访客柜台+1来触发计数系统。
如果isset返回true,则不执行任何操作。
答案 2 :(得分:0)
试试这个<\ n>工作
$refreshed = $_SERVER['HTTP_CACHE_CONTROL'];
if ($refreshed == 'max-age=0'){
$sql = "UPDATE posts SET hits = hits + 1 WHERE post_id = $id";
}
在网页刷新时,请在页面$_SERVER['HTTP_CACHE_CONTROL']
上尝试此脚本