首页/技术开发/内容

如何运用PHP会话显示出当前在线的用户

技术开发2022-07-19 阅读()
s:4:"lala"; a是变量名 s:12代表变量a的值"it is a test的长度是12 变量间用分号”;”分隔。
7、 session_decode
函数功能:sesssion信息解码
函数原型:boolean session_decode (string data)
返回值:布尔值
功能说明:这个函数可将session信息解码,成功则返回逻辑值true
8、 session_name
函数功能:存取当前会话名称
函数原型:boolean session_name(string [name]);
返回值:字符串
功能说明:这个函数可取得或重新设置当前session的名称。若无参数name则表示获取当前session名称,加上参数则表示将session名称设为参数name
9、 session_id
函数功能:存取当前会话标识号
函数原型:boolean session_id(string [id]);
返回值:字符串
功能说明:这个函数可取得或重新设置当前存放session的标识号。若无参数id则表示只获取当前session的标识号,加上参数则表示将session的标识号设成新指定的id
10、 session_unset
函数功能:删除所有已注册的变量。
函数原型:void session_unset (void)
返回值:布尔值
功能说明:这个函数和Session_destroy不同,它不结束会话。就如同用函数session_unregister逐一注销掉所有的会话变量。



编程思路
在社区、论坛中,我们常能看到当前在线的会员,使访问者有宾至如归之感。但这种程序是怎么做出来的呢?

流程如下:











建表user,保存注册用户信息。
字段 类型 备注
userid Int(10) 用户序列号 auto_increment关键字
username Varchar(50) 用户匿称
userpwd Varchar(50) 密码
email Varchar(50) 电子信箱
oicq Varchar(50) OICQ号
signature mediumtext 签名
imgurl Varchar(50) 头像
joindate Varchar(50) 加入时间
建类文件user.php 定义函数
exist($username)确认新注册用户是不是已经存在
nsert($username,$userpwd,$email,$oicq,$imgurl,$signature)插入注册用户
update($userid,$username,$userpwd,$email,$oicq,$imgurl,$signature) 更新用户数据
get_from_condition($con) 返回满足查询条件的记录集

建表session。当用户登录时即向此表插入新记录,离开或超时后删除记录,保证表中保存的是当前在线的用户。
字段 类型 备注
sessionid Int(10) 序列号 auto_increment关键字
userid Int(10) 用户序列号取自user表
ipaddress Varchar(50) Ip地址
lastactivity Int(10) 最后活动时间,用它来判断用户是否还在线
建类文件session.php 定义函数
insert($userid,$ipaddress,$lastactivity) 把登录成功的用户插入到表中
update($userid,$ipaddress,$lastactivity)更新在线用户最后活动时间
del($con)删除满足条件的用户,用它来清除离线用户
get_from_condition($con) 返回满足查询条件的记录集

公用文件global.php
 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;
}
登录文件logon.php
<? include "global.php";//把global.php文件包含进来

 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"]=="") { //判断是否已登录
?>
//下面是登录的表单
<form name="form1" method="post" action="">
名称: <input type="text" name="username">
密码: <input type="text" name="userpwd">
<input type="hidden" name="hiddenField" value="0">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置">
</form>
<?
}else{
echo "网友:".$HTTP_COOKIE_VARS["ccauser"]."你已经登录了"; //如果已登录则显示提示
$str="<br><br><a href='exit.php'>退出社区</a>";
echo $str;
}
?>

测试文件test.php
<?
include "global.php"; //把global.php文件包含进来
$strWelcome="欢迎<font color=red>".$_SESSION['ccauser']."</font><br>";
echo $strWelcome; //显示欢迎信息
$str=” 当前在线用户:<br>===================<br>”;
$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;
?>
<br><a href='exit.php'>退出社区</a>

退出文件exit.php
<?
 include "global.php"; //把global.php文件包含进来
 if ($_SESSION["online"]=="on"){
 $con="userid=$userid";
 $session->del($con); //在session表中删除用户信息。
 session_destroy();//结束当前的会话,并清空会话中的所有资源
 echo "已经退出社区......";
}
?>


第1页  第2页  第3页 

……

相关阅读