澳门新浦京app下载粗略计算在线时间,bug:ip相同

这是我的多用户统计的在线统计部分 gb_temp表: temp1 用户ID temp2
流览IP地址temp3 online//做了个标记,因为其他功能也要使用这个表 temp4
登陆时间 $onlinetime最长离线时间分钟
db_class是我定义的一个数据库操作类。 /////////////////// //在线统计 $db
= new db_class; $db-connect(); $limit_time = time() – ($onlinetime *
60); $online_time = time(); $db-query(delete from gb_temp where
(temp4$limit_time or temp2=’$ip’) and temp1=’$id’ and temp3=’online’);
//删除离线$onlinetime分钟的用户 $db-query(insert into gb_temp
(temp1,temp2,temp3,temp4) values
(‘$id’,’$ip’,’online’,’$online_time’)); $onres = $db-query(select
count(*) from gb_temp where temp1=’$id’ and temp3=’online’);
$onlineuser = $db-fetch_array($onres); $onlineuser = $onlineuser[0];

include “class/config.inc.php”; //把配置文件包含进来
$db = new db;
$db-> db_connect( ); //连接数据库
$user = new user; //初始化
$session = new session;
//启动会话
session_start();
//删除session表中已经过期的用户(即非在线网友)因为此文件总是被调用从而保证显示的都是当前在线的用户
$curtime=time();
$con=”lastactivity<$curtime”;
$session->del($con);
//正在线的网友需不断更新session表中的lastactivity时间,并重新设置用户的COOKIES
if ($HTTP_SESSION_VARS[“online”]==”on”){
//此处也可用$_SESSION[“online”]
$userid=$HTTP_SESSION_VARS[“userid”]; //取当前在线用户的userid
$ipaddress=substr($REMOTE_ADDR,0,50);
$lastactivity=time()+3600;
//更新最后活动时间,如时一个小时之内未调动页面就认为用户已离线,从而会被删除。
$session->update($userid,$ipaddress,$lastactivity);
}else{
//如果未登录那直接转入登录页面
$firstpage=”logon.php”;
header (“Location: $firstpage”);
exit;
}

<?PHP
/*

insert($userid,$ipaddress,$lastactivity) 把登录成功的用户插入到表中
update($userid,$ipaddress,$lastactivity)更新在线用户最后活动时间
del($con)删除满足条件的用户,用它来清除离线用户
get_from_condition($con) 返回满足查询条件的记录集

CREATE TABLE `db_online` (
  `ip` char(20) default NULL,
  `time` char(20) NOT NULL default ”,
  `name` char(200) NOT NULL default ‘游客’
) TYPE=MyISAM

if ($hiddenField==”0″){ //测检表单有未被提交
$con=”username=’$username’ and userpwd=’$userpwd'”;
$result=$user->get_from_condition($con);
if ($user->counter==1){
if (!session_is_registered(“online”)){//检测是否被登记过
session_register(“online”); //登记一个新的变量为会话变量
}
if (!session_is_registered(“ccauser”)){
session_register(“ccauser”);
}
if (!session_is_registered(“userid”)){
session_register(“userid”);
}
$ccauser=$username; //给会话变量赋值
$online=”on”; //这个变量在global.php用到以更新最后活动时间lastactivity
$userid=$user->userid;
$ipaddress=substr($REMOTE_ADDR,0,50);
$lastactivity=time()+3600;
$con=” userid=$userid”;
$session->get_from_condition($con);
//判断会话是否存在,有可能你在不同的机器上登两次。
if ($session->counter==1){
$session->update($userid,$ipaddress,$lastactivity); //如存在,更新
}else{
$session->insert($userid,$ipaddress,$lastactivity);
//如不存在,插入
}
//在客户机设置COOKIES
SetCookie(“ccauser”,$username,time()+3600);
Header(“Location:test.php”);//然后导向测试页
}
}
?>
if($HTTP_SESSION_VARS[“online”]==””) { //判断是否已登录
?>
//下面是登录的表单

*/

名称:
密码:

//粗略计算在线时间,bug:ip相同(局域网->外部网)者,只记录一人。不过几率很少

 

session_start();
//超时时间
$out_time=300;//60*5

}else{
echo “网友:”.$HTTP_COOKIE_VARS[“ccauser”].”你已经登录了”;
//如果已登录则显示提示
$str=”

$uesr_name=$_SESSION[‘uesr_name’];

退出社区”;
echo $str;
}
?>

$now=time();
$online=”db_online”;
$ip=$_SERVER[“REMOTE_ADDR”];

include “global.php”; //把global.php文件包含进来
$strWelcome=”欢迎”.$_SESSION[‘ccauser’].”
“;
echo $strWelcome; //显示欢迎信息

mysql_connect(“localhost”,”root”,””);
mysql_select_db(“数据库”);
//删除过时用户.
mysql_query(“delete from `$online` where  ($now-`time`)>$out_time or `name`=’$uesr_name’  or `ip`=’$ip’ “);

$str=” 当前在线用户:

”;
$con=” 1=1″;
//提出session表中所有记录即是当前在线用户,未把游客算在内
$result=$session->get_from_condition($con);
while($row=mysql_fetch_array($result)){
$con1=”userid=$row[userid]”;
$user->get_from_condition($con1);
$str.=$user->username.” “;
}
echo $str;
?>

退出社区

if($uesr_name){
    mysql_query(”  INSERT INTO `$online` (`ip`, `time`, `name`) VALUES (‘$ip’,’$now’,’$uesr_name’)  “);
}else{
    mysql_query(”  INSERT INTO `$online` (`ip`, `time`, `name`) VALUES (‘$ip’,’$now’,’游客’)  “);
}

?>

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图