如何使post视图计数唯一的用户使用php



我一直在stackoverflow上搜索,我一直在尝试一些例子,我发现,但它还没有工作,所以我真的很感激,如果我能得到任何帮助或建议。

基本上,我当前的目标是只更新唯一用户的count列。目前,当用户刷新浏览器时,计数会增加,所以我认为这不是计数视图的最佳方法。

我试过这样做,但每次刷新页面时,查看数仍然在增加。

<?php
  require_once '../config.php';
  $id = $_GET['id'];
  if (!isset($_SESSION['recent_posts'][$id])) {
    $sql = "UPDATE song SET count = count + 1 WHERE id = $id";
    $_SESSION['recent_posts'][$id] = 1;
}
  $stmt = $conn->prepare($sql);
  $stmt->execute();
?>

您可以通过使用cookie来实现。

<?php
  require_once '../config.php';
  $id = (int)$_GET['id'];

    if (!isset($_COOKIE['view_counted'])) {
        setcookie('view_counted', $id, time() + (86400 * 30), "/"); // 86400 = 1 day
        if (!isset($_SESSION['recent_posts'][$id])) {
            $sql = "UPDATE song SET count = count + 1 WHERE id = $id";
            $_SESSION['recent_posts'][$id] = 1;
        }
        $stmt = $conn->prepare($sql);
        $stmt->execute();
    }elseif (isset($_COOKIE['view_counted']) && $_COOKIE['view_counted'] != $id) {
        setcookie('view_counted', $id, time() + (86400 * 30), "/"); // 86400 = 1 day
        if (!isset($_SESSION['recent_posts'][$id])) {
            $sql = "UPDATE song SET count = count + 1 WHERE id = $id";
            $_SESSION['recent_posts'][$id] = 1;
        }
        $stmt = $conn->prepare($sql);
        $stmt->execute();
    }else{
        //you have already counted this as view.
    }

?>

最新更新