Счетчик страниц cookie в php

Я использую счетчик php-страниц, который будет отслеживать каждый раз, когда пользователь посещает эту страницу, пока браузер не будет закрыт. Я проверяю, установлен ли файл cookie, если он есть. Затем я увеличиваю его и reset его значение. Но проблема в том, что счетчик всегда на двоих, почему это?

<html> 
    <head> 
        <title>Count Page Access</title> 
   </head> 
  <body> 
<?php 

    if (!isset($_COOKIE['count']))
    {
        ?> 
Welcome! This is the first time you have viewed this page. 
<?php 
        $cookie = 1;
        setcookie("count", $cookie);
    }
    else
    {
        $cookie = $_COOKIE['count']++;
        setcookie("count", $cookie);
        ?> 
You have viewed this page <?= $_COOKIE['count'] ?> times. 
<?php  }// end else  ?> 
   </body> 
</html>

Изменить: Спасибо всем, я сделал pre increment вещь и получил ее на работу

Ответ 1

Это происходит из-за того, что ++ используется как пост-приращение вместо предварительного приращения. По существу, вы говорите: "установите $cookie на значение $_COOKIE['count'], а затем увеличивайте $_COOKIE['count']. Это означает, что каждый раз, когда вы его устанавливаете, вы на самом деле делаете $cookie равным 1, и даже если $_COOKIE['count'] показывает его как 2, фактический cookie, который вы отправляете, будет равен только 1. Если вы делаете $cookie = ++$_COOKIE['count'];, вы должны получить правильный результат.

Ответ 2

Эта строка является проблемой:

$cookie = $_COOKIE['count']++;

Он не увеличивается так, как вы ожидаете; переменная $cookie устанавливается в значение $_COOKIE, а затем $_COOKIE увеличивается. Это оператор постинкремента.

Вместо этого используйте оператор preincrement, который увеличивает и возвращает:

$cookie = ++$_COOKIE['count'];

Ответ 3

массив _COOKIE заполняется ONCE, когда сначала запускается script (до того, как какой-либо код фактически выполняется), а затем не будет снова тронут PHP. Даже если вы вызываете setcookie() для изменения одного из файлов cookie, это изменение не будет действовать до загрузки следующей страницы.

Кроме того, оператор ++ работает в режиме "пост-инкремент". Выполнение

$cookie = $_COOKIE['count']++;

сводится к следующему:

$cookie = $_COOKIE['count'];
$_COOKIE['count'] = $_COOKIE['count'] + 1;

Что вы хотите, это версия PRE-increment:

$cookie = ++$_COOKIE['count'];

который увеличивает значение cookie, и THEN присваивает его переменной cookie.

Ответ 4

Вам нужно всего лишь сделать это

setcookie('count', isset($_COOKIE['count']) ? $_COOKIE['count']++ : 1);

Так же:

<?php
    setcookie('count', isset($_COOKIE['count']) ? $_COOKIE['count']++ : 1);
    $visitCount = $_COOKIE['count'];
?>
<html> 
    <head> 
        <title>Count Page Access</title> 
    </head> 
    <body> 
        <?if ($visitCount == 1): ?>
            Welcome! This is the first time you have viewed this page. 
        <?else:?> 
            You have viewed this page <?= $_COOKIE['count'] ?> times. 
        <?endif;?>
    </body> 
</html>