Счетчик страниц cookie в php - PullRequest
11 голосов
/ 31 октября 2011

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

<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>

Редактировать: Спасибо всем, я сделал предварительное увеличение и заставил его работать

Ответы [ 4 ]

7 голосов
/ 31 октября 2011

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

7 голосов
/ 31 октября 2011

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

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

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

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

$cookie = ++$_COOKIE['count'];
5 голосов
/ 31 октября 2011

Массив _COOKIE заполняется ОДИН РАЗ, когда сценарий сначала запускается (до того, как какой-либо код будет фактически выполнен), а затем НЕ снова затрагивается PHP. Даже если вы выполняете вызов setcookie (), чтобы изменить один из файлов cookie, это изменение НЕ вступит в силу до загрузки следующей страницы.

Также оператор ++ работает в режиме «постинкремента». Делая

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

сводится к этому:

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

То, что вы хотите, это PRE-инкремент версия:

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

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

3 голосов
/ 31 октября 2011

Вам нужно только сделать это

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...