<?php
$counterFile="counter.txt";function displayCounter($counterFile) {if (!file_exists($counterFile)) {
$num=1;
}
else
{
$fp=fopen($counterFile, "r");
$num = fgets($fp,5);
$num += 1;

fclose($fp);
}
print "<div id=\"footer\">您是第&nbsp;"."$num"."&nbsp;位无聊的人</div>";$fp=fopen($counterFile, "w");
fputs($fp, "$num");
fclose($fp);
}displayCounter($counterFile);?>这是一段php访客计数的代码。可是,这样写有个问题,就是每刷新一次页面,都会计数一次。请问,应该如何修改,使访客在退出浏览器之前不重复计数?

解决方案 »

  1.   

    在访问时设置一个$_SESSION值,因为$_SESSION值关闭浏览器后会失效,就可以判断用户是否关闭浏览器了$num = fgets($fp,5);
    if (!isset($_SESSION['变量名'])){ //如果没有$_SESSION值,那么加1
    $num += 1;
    }
      

  2.   

    不知道楼主怎么样来计数
    一台电脑每天无论访问多少次都算一次?
    还是一台电脑进入一次网站就算一次?
    如果是后者,楼上方法可行
    如果是前者,恐怕要结合IP地址的判断了,已经访问过的IP计入一个文件中,刷新时先判断IP是否已经存在。但是这样也有一个问题,就是如果用户使用的是代理IP,那么无论多少用户使用该IP他们访问你的站点每天最多只能有一次。
    还有一种方法就是使用客户端的MAC地址,但是这要使用JS才行,受限于用户浏览器安全级别。
      

  3.   

    多谢楼上两位指教。刚刚开始自学PHP,有很多都不懂。
    楼上,我是希望这样:
    同一台电脑在关闭浏览器后,重新登录算一次。可是关闭浏览器之前刷新页面不要计数。
      

  4.   

    那么就使用cookie吧!这是一种常用的方法!
    <?php
    $counterFile="counter.txt"; function displayCounter($counterFile) {     if (isset($_COOKIE["访问已记录"])) {
           return;
        }
        //函数setcookie("cookie名","cookie记录内容", "有效时间"),默认有效时间不关闭浏览器之间有效
        setcookie("访问已记录", "");//time()+3600*12
        if (!file_exists($counterFile)) { 
           $num=1; 
        } 
        else { 
           $fp=fopen($counterFile, "r"); 
           $num = fgets($fp,5); 
           $num += 1;        fclose($fp); 
        } 
        print "<div id=\"footer\">您是第&nbsp;".$num."&nbsp;位无聊的人 </div>";     $fp=fopen($counterFile, "w"); 
        fputs($fp, "$num"); 
        fclose($fp); 
    } displayCounter($counterFile); 
      

  5.   

    感谢楼上的回答,我也想过用cookie,可是自己还没学会。
    您给的代码我试了试,很可惜,没有什么变化。
      

  6.   

    理解错了吗?= =?
    唔……这是用楼主代码改的,楼主看看符合要求不
    <?php
    session_start();
    if (!isset($_SESSION['guest'])){
    $_SESSION['guest']='online';
    }else{
    $_SESSION['guest']='end';
    }
    $counterFile="counter.txt";function displayCounter($counterFile) {if (!file_exists($counterFile)) {
    $num=1;
    }
    else
    {
    $fp=fopen($counterFile, "r");
    $num = fgets($fp,5);
    if ($_SESSION['guest']=='online'){ 
    $num += 1;
    $_SESSION['guest']='end';
    }fclose($fp);
    }
    print " <div id=\"footer\">您是第"."$num"."用户</div>";$fp=fopen($counterFile, "w");
    fputs($fp, "$num");
    fclose($fp);
    }displayCounter($counterFile);
    ?> 
      

  7.   

    个人认为
    不支持使用cookie。
    觉得session不错
    考虑过脚本没