2012-03-27 3 views
-1

Я пытаюсь сделать этот счетчик для куки. Куки дают правильные значения, когда я посещаю сайт не один раз, но для первого посещения всегда говорят, что файлы cookie (оба) не установлены. Я новичок в PHP, поэтому не уверен, что я что-то пропустил. Файлы cookie устанавливаются перед тегами html.Cookies counter php

setcookie("user", isset($_COOKIE["user"])? ++$_COOKIE["user"] : 1); 
setcookie("date", date("d/m/y h:i:s")); 
$count = $_COOKIE["user"]; 

--------------------------------- 
<body> 

    <p><?php 
     if($count == 1) 
      echo "Welcome! You're new here."; 
     else 
      echo "Hello, you have visited " .$_COOKIE["user"]. " times."; 
      echo "<br/>"; 
      echo "Your last visit was ".$_COOKIE["date"]; 

    ?></p> 

</body> 
+0

При открытии страницы во второй раз (так печенье определен) делает это печать: Здравствуйте, вы посетили 1 раз. ? – grifos

+0

Нет, он печатает «вы посетили 2 раза», и количество увеличивается на 1 после каждого обновления. – user977151

ответ

1

setcookie функция ставит куки в заголовок сервера HTTP, который отправляется вместе с первым запросом. Однако массив $_COOKIE не передает эти значения внутренне (из функции setcookie), вместо этого он генерируется из заголовков запросов, отправленных браузером, и это происходит только после того, как браузер получил cookie (с первого запроса) и отправил его обратно по второму запросу.

Что вы могли бы сделать это:

$count = isset($_COOKIE["user"])?$_COOKIE["user"]:1; 
+0

Спасибо, что ваш комментарий дал понять мне, но ваша идея не решила его на 100%. Но я все-таки понял это в конце. – user977151

1

Я не уверен, но все, что я вижу сейчас, это то, что еще используется ложный путь.
Вы можете написать:

if (cond) 
    do(); 
else 
    doelse(); 

Просто одиночные линии работают так.
Используйте вместо этого:

<?php 
     if($count == 1) 
      echo "Welcome! You're new here."; 
     else { 
      echo "Hello, you have visited " .$_COOKIE["user"]. " times."; 
      echo "<br/>"; 
      echo "Your last visit was ".$_COOKIE["date"]; 
     } 
?>