免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1137 | 回复: 0
打印 上一主题 下一主题

怎么记录个人主页的访问人数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-19 14:02 |只看该作者 |倒序浏览
现在的问题有一个网站,这个网站为每个人提供一个人主页显示其信息,现在需要记录下个人主页有被多少人访问过?
先要确定怎样才算是一次有效的访问
1、在一天时间内(24小时),同一个IP的访问只能算做一次。
2、一个用户有多个页面,在同一天内访问所有页面也只能算作一次。
3、对内网中多人共享同一IP的情况具有一定程度的支持。

解决这个问题需要一个用于排重的临时数据库,记录某个用户的信息被哪些人访问,访问时间,如果上一次的访问和这一次的访问时间是在同一天发生的只能算作一次。

怎么判定访问的人的身份是同一个人,可以采用记录IP和cookie的方法,记录IP就是同一个IP只能算一个人,还有一种就是记录下cookie,相比较而言cookie要精确一点。

为了让这个临时的表不能太大,影响性能和浪费空间,可以把两天前的数据清空以节省空间。

===================================================================================
php的一个实现
  1. <?php
  2. /****************************************************
  3. 功能:判定个人空间是否是有效访问
  4. 网站:www.lalabe.com
  5. 邮件:huyi8888@gmail.com
  6. *****************************************************/
  7. error_reporting(E_ALL);
  8. $link = mysql_connect('localhost', 'root', '123456')
  9.    or die('Could not connect: ' . mysql_error());
  10. mysql_select_db('do') or die('Could not select database');    

  11. //获取客户端IP
  12. function getip()
  13. {
  14.     if(getenv('HTTP_CLIENT_IP')) {
  15.     $ip = getenv('HTTP_CLIENT_IP');
  16.     } elseif(getenv('HTTP_X_FORWARDED_FOR')) {
  17.     $ip = getenv('HTTP_X_FORWARDED_FOR');
  18.     } elseif(getenv('REMOTE_ADDR')) {
  19.     $ip = getenv('REMOTE_ADDR');
  20.     } else {
  21.     $ip = 'Unknown';
  22.     }
  23.     return $ip;
  24. }

  25. /*
  26. 确保在执行这个函数前没有向页面输出内容,因为这里有cookie的操作
  27. */
  28. function ck_effect_visit($user_id, $type='ip')
  29. {
  30.     $ip = getip();
  31.     $ip = ip2long($ip);
  32.     $rnd = rand(1000,9999);
  33.     $time = time();
  34.     $state = true;
  35.     
  36.     //只考虑IP
  37.     if ($type == 'ip')
  38.     {
  39.         $query = mysql_query("SELECT * FROM `visit_temp` WHERE ip='$ip'");
  40.         while($row = mysql_fetch_array($query))
  41.         {
  42.             if (date("d",$row['lastvisit']) == date("d", $time))
  43.                 return false;
  44.         }
  45.         mysql_query("INSERT INTO `visit_temp`(user_id,lastvisit,ip,rand)VALUES('$user_id','$time','$ip','$rnd')");
  46.         return true;
  47.     }
  48.     //采用cookie来排重,可以考虑到多人共享同一IP上网的情况
  49.     if (empty($_COOKIE['__utz']))
  50.     {
  51.         setcookie('__utz', $ip.'_'.$rnd, time()+ 3600*24);
  52.         mysql_query("INSERT INTO `visit_temp`(user_id,lastvisit,ip,rand)VALUES('$user_id','$time','$ip','$rnd');");        
  53.     }
  54.     else
  55.     {
  56.         $ck_arr = explode("_", $_COOKIE['__utz']);
  57.         $cli_ip = $ck_arr[0];
  58.         $cli_rnd = $ck_arr[1];
  59.         $query = mysql_query("SELECT * FROM `visit_temp` WHERE user_id='$user_id' AND ip = '$cli_ip'");
  60.         $flag = false;
  61.         if (mysql_num_rows($query) > 0)
  62.         {
  63.             while($row = mysql_fetch_array($query))
  64.             {
  65.                 if ($row['rand'] == $cli_rnd)
  66.                 {
  67.                     if (date("d",$row['lastvisit']) != date("d", $time))
  68.                     {
  69.                         mysql_query("UPDATE `visit_temp` SET lastvisit='$time' WHERE user_id='$user_id' AND ip='$cli_ip' AND rand='$cli_rnd'");
  70.                         $state = true;
  71.                         //$_COOKIE['__utz'] = $ip.'_'.$rnd;
  72.                         setcookie('__utz', $ip.'_'.$rnd, time()+ 3600*24);
  73.                     }
  74.                     else
  75.                     {
  76.                         if ($cli_ip != $ip)
  77.                         {
  78.                             mysql_query("UPDATE `visit_temp` SET lastvisit='$time',$ip='$ip' WHERE user_id='$user_id' AND ip='$cli_ip' AND rand='$cli_rnd'");
  79.                             setcookie('__utz', $ip.'_'.$rnd, time()+ 3600*24);
  80.                         }
  81.                  $state = false;
  82.                  }
  83.                     $flag = true;            
  84.                  break;
  85.                 }
  86.             }
  87.             if (!$flag)
  88.             {
  89.                 mysql_query("INSERT INTO `visit_temp`(user_id,lastvisit,ip,rand)VALUES('$user_id','$time','$ip','$rnd');");
  90.                 $state = true;
  91.                 //$_COOKIE['__utz'] = $ip.'_'.$rnd;
  92.                 setcookie('__utz', $ip.'_'.$rnd, time()+ 3600*24);
  93.             }
  94.         }
  95.         else
  96.         {
  97.             mysql_query("INSERT INTO `visit_temp`(user_id,lastvisit,ip,rand)VALUES('$user_id','$time','$ip','$rnd')");
  98.             //$_COOKIE['__utz'] = $ip.'_'.$rnd;
  99.             setcookie('__utz', $ip.'_'.$rnd, time()+ 3600*24);
  100.             $state = true;
  101.         }
  102.     }
  103.     return $state;
  104. }
  105. $user_id = 1;
  106. $visit_stat = ck_effect_visit($user_id);
  107. $word = ($visit_stat == true) ? "有效访问" : "无效访问";
  108. echo $word;
  109. mysql_close($link);
  110. ?>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP