|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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来连接数据库了,这期间你是怎么学会的,我们不去考证了,但是事实证明,你已经可以了。 |
|