PHP对session对象的封装的很好,依据HTTP协定,每一个局限网站的访客都能够生成一个唯一的标识符类别:PHP教程 / 日期:2019-12-11 / 浏览:196 / 评论:0
echo session_id(); //6ed364143f076d136f404ed93c034201<br />
这个就是统计在线人数的症结所在,只需有这个session_id 也就可以够辨别接见的人了。由于每一个人都差别。
接下来,是怎样把session变量内里的值存到数据库内里去,这里有将引见另一个函数
bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable$destroy , callable $gc ) //callable 可随时支取的,要求即付的,随时可偿还的 // open(string $savePath, string $sessionName) 翻开衔接 //close() 封闭衔接 //read(string $sessionId) 对出数据 //write(string $sessionId, string $data) //写入数据 //destroy($sessionId) //删除数据 //gc($lifetime) //垃圾接纳函数
注重,上面有几个函数是有参数传入的,你只需表明有传送传入就是的。PHP在实行代码的时刻会自动读取
session中关于的参数
接下来就是完成上面五个函数和一个主函数就可以够了
session_set_save_handler( array("session","open"), array("session","close"), array("session","read"), array("session","write"), array("session","destroy"), array("session","gc") );
主函数就这样完成了.
注重:通常将对象的要领作为参数通报都须要运用这类情势:array(对象, "要领名")
接下来就是每一个函数的编写
//链接数据的open function open($path,$sessname) { $db = mysql_connect("localhost","root","123456","test"); mysql_select_db("test",$db); mysql_query("SET NAMES UTF8"); return true; }
封闭数据能够链接的close
function close(){ $db = mysql_connect("localhost","root","123456","test"); mysql_close($db); return true; }
症结函数要入手下手了,显现读取函数read(),重要,read()函数是有值传进去的,传入的是session_id
function read($sid){ $sql = "select data from session where sid='{$sid}' and card='".self::$card."'"; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_array($query); $row>0?$row["data"]:" "; }
第二个是写入函数,假如数据库内里存在的数据,只需更新时候就可以够了,新数据写入
function write($sid,$data) { $sql = "select sid from session where sid='{$sid}' and card='".self::$card."'"; $query = mysql_query($sql) or die(mysql_error()); $mtime = time(); $num = mysql_num_rows($query); if($num){ $sql = "UPDATE session SET data='{$data}', mtime ='{$mtime}'"; }else{ $sql = "INSERT INTO session (sid,data,mtime,ip,card) VALUES('{$sid}','{$data}','".time()."','{$_SERVER['REMOTE_ADDR']}','".self::$card."')"; } mysql_query($sql); return true; }
接下来就是表现PHP接纳机制的函数了,两个函数都有参数传入。
function destroy($sid){ $sql = "DELETE FROM session WHERE sid='{$sid}'"; mysql_query($sql) or die(mysql_error()); return true; } function gc($max_time){ $max_time = 600; $sql = "DELETE FROM session WHERE `mtime`<'".(time()-$max_time)."'"; mysql_query($sql) or die(mysql_error()); return true; }
好了,五个函数都完成了,再就是session表中心读出session的纪录条数了。就可以正确的统计出正在接见页面的人数。
10分钟没有操纵的用户纪录将被清空。
准确的经由过程php完成统计在线人数的要领的代码:
<?php $filename='online.txt';//数据文件 $cookiename='VGOTCN_OnLineCount';//cookie称号 $onlinetime=600;//在线有用时候,单位:秒 (即600等于10分钟) $online=file($filename); //PHP file() 函数把全部文件读入一个数组中。与 file_get_contents() 相似,差别的是 file() 将文件作为一个数组返回。数组中的每一个单位都是文件中响应的一行,包含换行符在内。假如失利,则返回 false $nowtime=$_SERVER['REQUEST_TIME']; $nowonline=array(); //获得依然有用的数据 foreach($online as $line){ $row=explode('|',$line); $sesstime=trim($row[1]); if(($nowtime - $sesstime)<=$onlinetime){//假如仍在有用时候内,则数据继承保留,不然被摒弃不再统计 $nowonline[$row[0]]=$sesstime;//猎取在线列表到数组,会话ID为键名,末了通讯时候为键值 } } /* @建立接见者通讯状况 运用cookie通讯 COOKIE 将在封闭浏览器时失效,但假如不封闭浏览器,此 COOKIE 将一向有用,直到顺序设置的在线时候超时 */ 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.'");';
以上就是php怎样完成和准确统计在线人数功用的细致内容,更多PHP相干学问,请接见PHP教程!
以上就是PHP 完成准确统计在线人数功用的细致内容,更多请关注ki4网别的相干文章!