键字 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 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"]=="") { //判断是否已登录 ?> //下面是登录的表单 名称: 密码: }else{ echo "网友:".$HTTP_COOKIE_VARS["cc