仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2150|回复: 20
打印 上一主题 下一主题

[学习教程] PHP编程:若何使用PHP会话显示出以后在线的用户

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在学习PHP这六个月里,每看到一个优秀的php脚本,就会兴奋的手舞足蹈,嘴里还不停的说:太酷了,太酷了。呵呵,很幼稚吧,但这可能就是兴趣。显示|在线   此文是我前一阵子写的,帖下去以谢人人对我的匡助。
=============

综述
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 "已加入社区......";
}
?>
  终于理解了数据库的概念,而且让你兴奋不已的是你终于可以通过PHP来连接数据库了,这期间你是怎么学会的,我们不去考证了,但是事实证明,你已经可以了。
精灵巫婆 该用户已被删除
沙发
发表于 2015-2-4 12:54:39 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
第二个灵魂 该用户已被删除
板凳
 楼主| 发表于 2015-2-9 22:41:59 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
再见西城 该用户已被删除
地板
发表于 2015-2-21 22:14:16 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
分手快乐 该用户已被删除
5#
发表于 2015-3-5 22:45:15 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
飘灵儿 该用户已被删除
6#
发表于 2015-3-10 16:35:20 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
柔情似水 该用户已被删除
7#
发表于 2015-3-11 17:45:11 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-13 04:09:44 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
透明 该用户已被删除
9#
发表于 2015-3-17 10:10:25 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
只想知道 该用户已被删除
10#
发表于 2015-3-18 11:28:15 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
admin 该用户已被删除
11#
发表于 2015-3-24 22:19:49 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
小女巫 该用户已被删除
12#
发表于 2015-4-4 14:05:39 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
变相怪杰 该用户已被删除
13#
发表于 2015-4-6 04:42:13 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
因胸联盟 该用户已被删除
14#
发表于 2015-4-13 06:04:13 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
山那边是海 该用户已被删除
15#
发表于 2015-4-30 00:55:11 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
谁可相欹 该用户已被删除
16#
发表于 2015-4-30 08:36:58 | 只看该作者
爱上php,他也会爱上你。
再现理想 该用户已被删除
17#
发表于 2015-5-4 21:06:30 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
兰色精灵 该用户已被删除
18#
发表于 2015-6-17 20:47:46 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
灵魂腐蚀 该用户已被删除
19#
发表于 2015-6-23 04:45:36 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
飘飘悠悠 该用户已被删除
20#
发表于 2015-6-24 12:58:18 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-9 23:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表