在线人数统计问题!

tyhhouxiangting 2003-08-23 02:56:48
请教!请教!如何知道网站的在线人数!谢谢!
...全文
22 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
skystar008 2003-11-11
  • 打赏
  • 举报
回复
总之,用的就是数据库结合session或是文本结合session如果要知道具体的用户无非就是再加个用户机器的IP。
AgathaZ 2003-11-11
  • 打赏
  • 举报
回复
up
xinyaoxp 2003-11-11
  • 打赏
  • 举报
回复
up
pwtitle 2003-11-10
  • 打赏
  • 举报
回复
原理:
每当一个用户登陆的时候就生成一个session_id,并记录下登陆时间,并设置一个超时时间,并记录到库中(文本中),然后在页面上读取就可以了。
用户自己将检查自己的session_id是否仍然存在在库中,如果存在,就刷新他的登陆时间,如果不存在就增加一条自己的记录

SESSION_ID Login_Time
345234234 34234412424
......... ...........


对于异常吊线情况,则由其他用户检查他的Login Time,如果与当前时间相比已经超时间,则删除这条记录。

entice 2003-11-10
  • 打赏
  • 举报
回复
<?php
session_start();

echo session_id();

//首先你要有读写文件的权限
//本程序可以直接运行,第一次报错,以后就可以
$online_log = "count.dat"; //保存人数的文件,
$timeout = 30;//30秒内没动作者,认为掉线
$entries = file($online_log);

$temp = array();

for ($i=0;$i<count($entries);$i++) {
$entry = explode(",",trim($entries[$i]));
if (($entry[0] != session_id()) && ($entry[1] > time())) {
array_push($temp,$entry[0].",".$entry[1]."\n"); //取出其他浏览者的信息,并去掉超时者,保存进$temp
}
}

array_push($temp,session_id().",".(time() + ($timeout))."\n"); //更新浏览者的时间
$users_online = count($temp); //计算在线人数

$entries = implode("",$temp);
//写入文件
$fp = fopen($online_log,"w");
flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些网络文件系统中正常工作
fputs($fp,$entries);
flock($fp,LOCK_UN);
fclose($fp);

echo "当前有".$users_online."人在线";

?>
entice 2003-11-10
  • 打赏
  • 举报
回复
楼上说的,就是我上面的代码...用了就知道了...很好用的...而且是本文的,你也可以自己改成数据库的....
sports98 2003-08-23
  • 打赏
  • 举报
回复
我没用数据库,你看看,我是用文本结合SESSION的

http://www.dev-club.com/club/bbs/showEssence.asp?id=23132
vitalgg 2003-08-23
  • 打赏
  • 举报
回复
// 常用设置
$online_limit = 500; //在线静止时限,单位秒
$db['host'] = 'localhost'; //数据库主机
$db['usepconnect']= 1; //使用持续连接 ,
$db['user'] = '*****'; //登录用户
$db['password'] = '*****'; //登录密码
$db['db'] = '*****'; //数据库名
$db['user_tbl'] = "user"; //用户表
$db['online'] = "online"; //在线人员表,数据库方式记录在线IP时所用的表.
$db['stat'] = $db['db']; //统计用数据库
/*
* 基于数据库的当前在线记录函数
* BUG:同一LAN内的非注册客户无法统计,可以用cookie解决.
*/
function add_on_based_db()
{
global $online_limit,$db;

//连接数据库
$conn = mysql_pconnect($db['host'],$db['user'],$db['password']);
mysql_select_db($db['db']);

//清除不在线人员
mysql_query("delete from {$db['online']} where time<now()-$online_limit;");

//加入在线名单
if ($_SESSION['logininfo']) {
$result = mysql_query("select * from {$db['online']} where userid='{$_SESSION['logininfo']['loginid']}';");
if ($res = mysql_fetch_array($result)) {
mysql_query("update {$db['online']} set time=now() where userid='{$_SESSION['logininfo']['loginid']}';");
} else {
mysql_query("insert into {$db['online']} values('{$_SESSION['logininfo']['loginid']}','{$_SERVER['REMOTE_ADDR']}',now())");
}
} else {
$result = mysql_query("select * from {$db['online']} where IP='{$_SERVER['REMOTE_ADDR']}' and userid='------';");
if ($res = mysql_fetch_array($result)) {
mysql_query("update {$db['online']} set time=now() where IP='{$_SERVER['REMOTE_ADDR']}'and userid='------';");
} else {
mysql_query("insert into {$db['online']} values('------','{$_SERVER['REMOTE_ADDR']}',now());");
}
}
}

//在线用户列表函数
function online_list()
{
global $db;
$conn = mysql_pconnect($db['host'],$db['user'],$db['password']);
mysql_select_db($db['db']);

//会员在线
$result = mysql_query("select a.userid as id,b.nike_name as nikename from {$db['online']} a,{$db['user_tbl']} b where a.userid=b.loginid ;");
while ($res = mysql_fetch_array($result)) {
if ($res['nikename'] == "") {
$res['nikename'] = $res['id'];
}
$login .="{$res['id']}({$res['nikename']})<br />";
}
$result = mysql_query("select IP from {$db['online']} where userid='------';");
while ($res = mysql_fetch_array($result)) {
$login .="客人<br />";
}
return $login;
}

======
在线统计数据表
CREATE TABLE `online` (
`userid` char(20) NOT NULL default '',
`IP` char(16) NOT NULL default '',
`time` timestamp(14) NOT NULL
) TYPE=MyISAM COMMENT='在线人员';
CREATE TABLE `user` (
`id` int(10) unsigned zerofill NOT NULL auto_increment,
`loginid` varchar(20) NOT NULL default '',
`nike_name` varchar(20) NOT NULL default '',
`password` varchar(33) NOT NULL default '',
.
.
.
PRIMARY KEY (`id`)
) TYPE=MyISAM COMMENT='用户登录及注册信息' AUTO_INCREMENT=14 ;
ashchen 2003-08-23
  • 打赏
  • 举报
回复
统计日志

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧