在php中的Cookie页面计数器

时间:2011-10-31 19:50:21

标签: php cookies

我正在实施一个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 个答案:

答案 0 :(得分:7)

这一行是问题所在:

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

它不会以你期望的方式增加;变量$cookie设置为$_COOKIE的值,然后$_COOKIE递增。这是后增量算子。

改为使用preincrement运算符,该运算符递增,然后返回:

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

答案 1 :(得分:7)

这种情况正在发生,因为++被用作后增量而不是预增量。基本上正在发生的事情是你说,“将$cookie设置为$_COOKIE['count']的值,然后增加$_COOKIE['count']。这意味着每次设置它时你实际上只是在做$cookie等于1,即使$_COOKIE['count']显示为2,您发送的实际Cookie也只会等于1.如果执行$cookie = ++$_COOKIE['count'];,您应该得到正确的结果。

答案 2 :(得分:5)

当脚本首次启动时(实际执行任何代码之前)填充_COOKIE数组,然后PHP不再触及。即使您执行setcookie()调用以更改其中一个cookie,该更改也不会生效,直到下一页加载。

同样,++运算符正在“后递增”模式下工作。做

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

归结为:

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

你想要的是PRE-increment版本:

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

增加cookie值,然后将其分配给cookie var。

答案 3 :(得分:3)

你只需要这样做

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>