PHP
$post_id = $_GET['post_id'];
if(!isset($_SESSION['view_counter'])){
$_SESSION['view_counter'] = $post_id;
$increment_views->execute();
}
mysql查询
$increment_views = $connectDB->prepare("UPDATE database.table
SET post_views = post_views + 1 WHERE post_id = $post_id;");
当我尝试使用会话添加页面视图计数器时,只是坚持这个问题。这似乎很简单,但无法解决问题。可以说我目前正在www.website.com/posts.php?post_id=3
。所以首先没有设置会话然后代码运行,会话设置,视图递增,看起来很好!然后我浏览到www.website.com/posts.php?post_id=5
,但视图不会增加,因为会话已经存在。那么在这种情况下我将如何区分会话。所以它不会认为这两个页面是相同的。
答案 0 :(得分:2)
正如我所提到的,你应该过滤IP,但这里有一个建议:
$post_id = $_GET['post_id'];
if(!isset($_SESSION["viewcount_".$post_id])) {
$_SESSION["viewcount_".$post_id] = true;
$increment_views->execute();
}
答案 1 :(得分:1)
我会在刷新时存储会话变量,例如$_SESSION['countedPostId']=$post_id
,然后检查以确保$_GET['postid']
与$_SESSION['countedPostId']
相同。如果是的话,它已被计算在内。如果不是,您需要重新计算。
如果我正确地解释了你的问题,那就是。
替代方法编辑:
也许尝试在sessions变量中存储一个“已经增加”的post_id数组,以防止问题返回/转发。