Задать вопрос

Засада с куки. Не работает счетчик посещений. В чем может быть причина?

В файле index.php значение переменной $visitCounter застряло на одной цифре, т.е. не работает счетчик посещений (в $visitCounter не приходит новое значение). При этом скрипт "cookie.inc.php" работает как надо. В чем может быть причина?
Спасибо.

index.php
<?
	include 'inc/headers.inc.php';
	include 'inc/cookie.inc.php'
?>
<!DOCTYPE html>
<html>
	<head>
		<title><?= $title?></title>
		<meta charset="utf-8" />
		<link rel="stylesheet" type="text/css" href="inc/style.css" />
	</head>
	<body>

		<div id="header">
			<!-- Верхняя часть страницы -->
			<img src="img/logo-php.png" width="187" height="29" alt="Наш логотип" class="logo" />
			<span class="slogan">обо всём сразу</span>
			<!-- Верхняя часть страницы -->
		</div>

		<div id="content">
			<!-- Заголовок -->
			<h1><?= $header?></h1>
			<blockquote>
			<?php //Куки. Приветствие пользователя и время последнего посещения (работа с куки в файле inc/cookie.inc.php):
			if ($visitCounter == 1) { // если пользователь зашел первый раз
				echo "Спасибо, что зашли на огонек<br>";
			}else { // если пользователь зашел не первый раз
				echo "<h1>Вы зашли к нам {$visitCounter}-й раз</h1><br> Последнее посещение: {$lastVisit}";
			}
			?>
			</blockquote>
			<!-- / Заголовок -->
			<!-- Область основного контента -->
			<?php
				include 'inc/routing.inc.php';
			?>	
			<!-- Область основного контента -->
		</div>
		<div id="nav">
			<!-- Навигация -->
			<h2>Навигация по сайту</h2>
			<ul>
				<li><a href='index.php'>Домой</a></li>
				<li><a href='index.php?id=contact'>Контакты</a></li>
				<li><a href='index.php?id=about'>О нас</a></li>
				<li><a href='index.php?id=info'>Информация</a></li>
				<li><a href='test/index.php'>Он-лайн тест</a></li>
				<li><a href='index.php?id=gbook'>Гостевая книга</a></li>
				<li><a href='eshop/catalog.php'>Магазин</a></li>
				<li><a href="index.php?id=log">Журнал посещений</a></li>
			</ul>
			<!-- Навигация -->
		</div>
		<div id="footer">
			<!-- Нижняя часть страницы -->
			&copy; Супер-мега сайт, 2000 &ndash; <?= date('Y')?>
			<!-- Нижняя часть страницы -->
		</div>
	</body>
</html>


cookie.inc.php
<?
$visitCounter = 0; // переменная для подсчета кол-ва посещений (счетчик посещений);

if (isset($_COOKIE['visitCounter'])) { // проверить, пришли ли куки (if true - присвоить их значение переменной $visitCounter)
	$visitCounter = $_COOKIE['visitCounter'];
}

$visitCounter++; // увеличить значение переменной $visitCounterна единицу
// т.е. когда человек приходит к нам первый раз, мы мимо if-a промахиваемся (при первом обновлении страници куки отправляются, а при втором они приняты и срабатывает if) и значение переменной $visitCounter будет 1
// эту единицу пошлем в куку - setcookie("visitCounter", "$visitCounter");
// когда юзер прийдет второй раз, мы попадаем в if, засчитываем оттуда единицу (значение $visitCounter), дальше единица  ($visitCounter++) - значит пользователь пришел 2-й раз 

/*==================================================*/

$lastVisit = ""; // строковая переменная для хранения значения последнего посещения страницы (значение по умолчанию - пустая строка)
// переменную по умолчанию объявлять не обязательно

if (isset($_COOKIE['lastVisit'])) { // проверить, пришли ли куки (if true - присвоить их значение переменной $lastVisit)
	$lastVisit = date("d-m-Y H:i:s", $_COOKIE['lastVisit']); // date() - распаковать временную метку (  день - месяц - год часы - минуты - секунды )
}
// если человек пришел в первый раз, то в visitCounter у нас "1", а в lastVisit - ничего

/*================================================*/

// условие (ограничение), чтобы куки устанавливались (отправлялись) только один раз в день (если последняя дата посещения сайта не сегодня):
// if(date('d-m-Y', $_COOKIE['lastVisit']) != date('d-m-Y')){
	setcookie("visitCounter", "$visitCounter", 0x7FFFFFFF); // отправить (установить) куки по имени "visitCounter" со значением переменной $visitCounter
	// setcookie("visitCounter", "$visitCounter", ); - создать долговременную куку (третий параметр - это время жизни куки (несколько десятков лет); шестнадцатиричный формат)

	setcookie('lastVisit', time(), 0x7FFFFFFF); // Установить куки (отправить куки) по имени lastVisit со значением равным текущей временной метке(timestamp)
	// как удобней всего хранить дату? - в виде временной метки - time()
	// а поскольку дату храним в виде временной метки - эту временную метку нужно распаковать в условии выше: "if (isset($_COOKIE['lastVisit']))"
	$visitCounter++; // чтобы номер посещения сайта выводился при первой загрузке страницы (а не после перезагрузки (куки сначала отправляются и сохраняются в браузере, а обрабатываютя уже после перезагрузки страницы) )
// }

// значения переменных "$visitCounter" и "$lastVisit" выводятся в файле index.php (для этого нужно подключить этот файл в "index.php")

// (del) test
echo $visitCounter;
echo $lastVisit;
  • Вопрос задан
  • 678 просмотров
Подписаться 2 Оценить 7 комментариев
Пригласить эксперта
Ответы на вопрос 2
mrMazai
@mrMazai
WebDeveloper
в headers.inc.php что-то выводится через echo?
Все действия с cookies должны производиться до вывода, даже один пробел помешает присвоению кук.
Ответ написан
Комментировать
@justpusher
Вы читаете из кук значение visitCounter в переменную, потом записываете в куки обратно то же самое значение переменной, и только потом увеличиваете переменную. В переменной хранится увеличенное значение, оно же и будет использоваться в index.php, но в куках ничего не поменяется, и при следующем запуске будет всё то же самое.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы