天天看點

利用cookies統計線上通路人數

<?php

$filename = 'online.txt';  //資料檔案

$cookiename = 'VGOTCN_OnLineCount';  //cookie名稱

$onlinetime = 600;  //線上有效時間,機關:秒 (即600等于10分鐘)

$online = file($filename);

$nowtime = time();

$nowonline = array();

foreach($online as $line) {

 $row = explode('|',$line);

 $sesstime = trim($row[1]);

 if(($nowtime - $sesstime) <= $onlinetime) {  //如果仍在有效時間内,則資料繼續儲存,否則被放棄不再統計

  $nowonline[$row[0]] = $sesstime;  //擷取線上清單到數組,會話ID為鍵名,最後通信時間為鍵值

 }

}

if(isset($_COOKIE[$cookiename])) {  //如果有COOKIE即并非初次通路則不添加人數并更新通信時間

 $uid = $_COOKIE[$cookiename];

} else {  //如果沒有COOKIE即是初次通路

 $vid = 0;  //初始化通路者ID

 do {  //給使用者一個新ID

  $vid++;

  $uid = 'U'.$vid;

 } while (array_key_exists($uid,$nowonline));

 setcookie($cookiename,$uid);

}

$nowonline[$uid] = $nowtime;  //更新現在的時間狀态

$total_online = count($nowonline);

if($fp = @fopen($filename,'w')) {

 if(flock($fp,LOCK_EX)) {

  rewind($fp);

  foreach($nowonline as $fuid => $ftime) {

   $fline = $fuid.'|'.$ftime."\n";

   @fputs($fp,$fline);

  }

  flock($fp,LOCK_UN);

  fclose($fp);

 }

}

 echo 'document.write("'.$total_online.'");';

?>