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

Я реализую счетчик 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> 

Редактировать: Спасибо всем, я сделал pre increment вещь и заставил ее работать

Solutions Collecting From Web of "Счетчик страниц cookie в php"

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

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

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

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

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

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

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

Кроме того, оператор ++ работает в режиме «пост-инкремент». дела

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

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

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

Вам нужна версия PRE-increment:

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

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

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

 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>