Счетчик страниц 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>