首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> PHP教程
如何利用PHP会话显示出当前在线的用户-PHP教程,PHP应用
作者:网友供稿 点击:3
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
此文是我前一阵子写的,帖上来以谢大家对我的帮助。
=============

综述
php会话即session是指用户从进入网站到关闭网站这段时间内活动的一种机制,它提供了所有网页都共同使用的公共变量存贮机制。那么session到底有什么用处呢?网上购物时大家都用过购物车,你可以随时把你选购的商品加入到购物车中,最后再去收银台结帐。在整个过程中购物车一直扮演着临时存贮被选商品的角色,用它追踪用户在网站上的活动情况,这就是session的作用。
session的发明填补了http协议的局限,http协议被认为是无状态协议,当它在服务端完成响应之后,服务器就失去了与该浏览器的联系。会话的发明使得一个用户在多个页面间切换时能够保存他的信息。
在php3版本未直接提供session功能,我们只能用其它办法来实现,比如用phplib。如果说php4与php3相比,它最大的进步就是提供了session。

session基础知识
要使用session需要php4.1以上的版本,而且需要把php.ini中的register_globle=off设成register_globle=on。另外,session.cookie_path = / 这行不易更改。
php中的session默认情况下是使用客户端的cookie。当客户端的cookie被禁用时,会自动通过query_string来传递。

php处理会话的函数一共有11个,我们详细介绍一下将要用到几个函数。
1、 session_start
函数功能:开始一个会话或者返回已经存在的会话。
函数原型:boolean session_start(void);
返回值:布尔值
功能说明:这个函数没有参数,且返回值均为true。最好将这个函数置于最先,而且在它之前不能有任何输出,否则会报警,如:warning: cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/cga/member/1.php:2) in /usr/local/apache/htdocs/cga/member/1.php on line 3
2、 session_register
函数功能:登记一个新的变量为会话变量
函数原型:boolean session_register(string name);
返回值:布尔值。
功能说明:这个函数是在全局变量中增加一个变量到当前的session中,参数name就是想要加入的变量名,成功则返回逻辑值true。可以用$_session[name]或$http_session_vars[name]的形式来取值或赋值。
3、 session_is_registered
函数功能:检查变量是否被登记为会话变量。
函数原型:boobean session_is_registered(string name);
返回值:布尔值
功能说明:这个函数可检查当前的session之中是否已有指定的变量注册,参数name就是要检查的变量名。成功则返回逻辑值true。
4、 session_unregister
函数功能:删除已注册的变量。
函数原型:boolean session_session_unregister(string name);
返回值:布尔值
功能说明:这个函数在当前的session之中删除全局变量中的变量。参数name就是欲删除的变量名,成功则返回true.
5、 session_destroy
函数功能:结束当前的会话,并清空会话中的所有资源。
函数原型:boolean session destroy(void);
返回值:布尔值。
功能说明:这个函数结束当前的session,此函数没有参数,且返回值均为true

上面介绍函数下文将会用到,但还有一些有关session的函数也介绍一下:
6、 session_encode
函数功能:sesssion信息编码
函数原型:string session_encode(void);
返回值:字符串
功能说明:返回的字符串中包含全局变量中各变量的名称与值,形式如:a|s:12:"it is a test";c|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 "已经退出社区......";
}
?>

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·php聊天室技术
·Java面试中的陷阱-JSP教程,Java技巧及代码
·如何找出在线电影的真实下载地址
·用Visual C#实现局域网点对点通讯-.NET教程,C#语言
·不使用installutil.exe安装WINDOWS服务-.NET教程,Windows开发
·域名查询代码公布
·J2EE项目10大风险-JSP教程,J2EE/EJB/服务器
·“IIS配置401错误”完美解决方案-.NET教程,评论及其它
·如何使用ASP实现网站的“目录树”管理-ASP教程,数据库相关
·Java 面试中的陷阱-JSP教程,Java技巧及代码
最新文章
·windows powershell的12项酷功能_windows vista
·google adwords投放报告(一)_网赚技巧
·互联网赚钱三种最基本的模式_网赚技巧
·百度联盟:何种做法会被认为是网站作弊_网赚技巧
·google adsense电话验证的注意事项_网赚技巧
·王峰:没什么可以改变我与雷军的十年友情_站长访谈
·胡安军:创业需要一种信仰_站长访谈
·金融界ceo赵志伟:行业整合才刚刚开始_站长访谈
·李军 bios之家的荣耀与梦想_站长访谈
·酷溜网李善友:创业不赚钱 毋宁死_站长访谈
相关主题
  • 如何利用procmail来对付垃圾邮件_qmail
  • 如何利用php和css改变网页文字大小_php技巧
  • 如何利用PHP来截取一段中文字符串而不出现乱码-PHP教程,PHP应用
  • 如何利用php+mysql保存和输出文件
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭