通常,当访问者访问网站时,页面会记录用户的cookie信息,当cookie过期时,用户被视为不在线。在本文中,我们使用PHP记录访问者的IP,并在客户端记录cookie和过期时间。同时,通过新浪IP地址界面,我们得到访客的地理位置(本例中只记录了省份),并写入mysql表中,这样我们就可以统计一段时间内的访客总数,查看访客的区域分布。
HTML将显示当前在线号码的div#total和显示页面上访问者区域分布的list # only放在一起。默认情况下,我们在列表中放置并加载一张动画图片。稍后,当鼠标滑向时,我们使用jQuery来控制详细列表。
Class=' demo' div id=' total '当前在线:span id=' onlinenum '/span/div ul id=' onlinelist ' liimg src=' http 3360 loader . gif '/Li/ul/div CSS我们使用CSS来渲染显示效果,为了防止我们的示例难看,我们在下面的代码中使用了CSS3。演示{ width:150pxmargin:20px汽车;font-size :14 px } # total { padd :6 px 10px;背景:#090 url(arr.png)无重复右上方;color: # fffcursor:pointer指针;-moz-border-radius :5 px;-web kit-border-radius :5 px;border-radius :5 px;-moz-box-shadow :0 0 3px # CCC;-web kit-box-shadow :0 0 3px # CCC;box-shadow :0 0 3px # CCC;} # online list { background : # f7f 7;border:1px固体# d3d3d3display:none-moz-border-radius :5 px;-web kit-border-radius :5 px;border-radius :5 px;-moz-box-shadow :0 0 3px # CCC;-web kit-box-shadow :0 0 3px # CCC;box-shadow :0 0 3px # CCC;} # online list Li { height :20 px;线高:20 px;padding:4px 6pxBorder-bottom:1px虚线# d9d9d9} #在线列表lispan {float3360right} #在线列表Li 3360 haver { background 3360 # fff } MySQL,我们需要在线准备一个数据表,记录访问者的IP、地区和访问时间。整个样本统计过程依赖于此表,其结构如下:
CREATE TABLE IF NOT EXISTS ` online `(` id ' int(11)NOT NULL AUTO _ INCREMENT,` IP ' varchar(30)NOT NULL,`省份' varchar(64) NOT NULL,` add time ' int(10)NOT NULL DEFAULT ' 0 ',PRIMARY KEY(` id `) ENGINE=MyISAM DEFAULT CHARSET=utf8;PHPonline.php用于记录访问者信息,包括IP地址和地区。首先,检查数据表中是否有访客IP记录,如果有,只更新访问时间,否则,获取用户所在的省域,将用户IP即省域插入表中。在这里,可以判断是否有访客的cookie记录。如果没有cookie记录,可以请求新浪IP地址库获取访问者的地区信息,并设置cookie值和过期时间。最后,我们删除表中过期的记录,统计记录总数并输出。有关详细信息,请参见代码注释。
include _ once(' connect。PHP’);//连接数据库$ IP=get _ client _ IP();//获取客户端IP $ time=time();//查询表中是否有互联网协议(互联网协议的缩写)为当前访客互联网协议(互联网协议)的记录$query=mysql_query('从联机中选择id,其中IP=' $ IP ');if(!mysql_num_rows($query)){//如果不存在访客IP if($_COOKIE['geoData']){//如果存在饼干,则获取用户的区域$省份=$ _ COOKIE[' GeoDATa '];//区域(省份)}否则{ $ API='http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=jsonip=$ IP ';$ JSON=file _ get _ contents($ API);//$arr=json_decode($json,true);//解析json $省份=$arr['省份'];//获取省份setcookie('geoData ',$省,$ time 600);//设置饼干,设置过期时间为10分钟} //将访客信息插入到数据表中MySQL _ query('在线插入(IP,省份,addtime)值(' $ip ',' $省份,' $ time ');}else{//如果存在,则更新该用户访问时间MySQL _ query('更新在线设置addtime=' $ time '其中IP=' $ IP ');} //删除已过期的记录$ out time=$ time-600;mysql_query('从联机删除,其中添加time $ out time’);//统计总记录数,即在线用户数list($ TotalOnline)=MySQL _ fetch _ array(MySQL _ query('从在线的中选择计数(*));echo $ totalOnline//输出在线总数MySQL _ close();函数get_client_ip()用来获取用户真实知识产权。
函数get _ CLIENT _ IP(){ if(getenv(' HTTP _ CLIENT _ IP ')str secmp(getenv(' HTTP _ CLIENT _ IP ','未知)$ IP=getenv(' HTTP _ CLIENT _ IP ');else if(getenv(' HTTP _ X _ FORWARDED _ FOR ')str secmp(getenv(' HTTP _ X _ FORWARDED _ FOR '),'未知')$ IP=getenv(' HTTP _ X _ FORWARDED _ FOR ');else if(getenv(' REMOTE _ ADDR ')str secmp(getenv(' REMOTE _ ADDR ','未知)$ IP=getenv(' REMOTE _ ADDR ');else if(isset($ _ SERVER[' REMOTE _ ADDR '])$ _ SERVER[' REMOTE _ ADDR ']str secmp($ _ SERVER[' REMOTE _ ADDR '],'未知)$ IP=$ _ SERVER[' REMOTE _ ADDR '];else $ip='未知;退货($ IP);} geo.php用来统计各省份(区域)访客人数分布。通过查询数据库,并按省份分组排序即可,注意我们将最终的数据集以JSON的形式输出,便于前端创建交互式、快速动态网页应用的网页开发技术交互。
include _ once(' connect。PHP’);//连接数据库//查询区域统计$sql='选择省,从在线组中按省排序按desc总计计算(*);$ result=MySQL _ query($ SQL);while($ row=MySQL _ fetch _ array($ result)){ $ list[]=array('省份=$row['省份],' total '=$ row[' total ']);} echo JSON _ encode($ list);//以json格式输出jQuery前端页面需要做的是,页面加载时展示访客总数,即使用创建交互式、快速动态网页应用的网页开发技术请求online.php即可。然后当鼠标滑向统计箭头时,通过创建交互式、快速动态网页应用的网页开发技术请求geo.php获取各区域省份的在线人数,并以下拉的方式展现效果。
$(function(){ $('#onlinenum ')).加载('在线。PHP’);$('.演示')。悬停(函数(){ $(' #在线列表')).向下滑动("快速");var str=$。getJSON('geo.php ',函数(json){ $ .每个(json,function(index,array){ str=str ' lispan ' array[' total ']'/span ' array['省份]'/李';});$('#onlinelist ').html(字符串);});},function(){ $('#onlinelist ').向上滑动("快速");});});最后,该示例依赖,所以别忘了在页面中请先加载jquery库,目前已经到jquery-1.9.1版本了。
是不是内容很精彩,很丰富,就是分享给大家的,希望对大家的学习有所帮助。