您的位置:首页 > 编程语言 > PHP开发

php里session的用法(超级经典)

2016-03-04 09:49 459 查看
php中session的用法 

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


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 

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["ccauser"]."你已经登录了";
//如果已登录则显示提示 

$str=" 

退出社区"; 

echo $str; 



?> 

测试文件test.php 

include "global.php";
//把global.php文件包含进来 

$strWelcome="欢迎[color=red]".$_SESSION['ccauser']."[/color] 

"; 

echo $strWelcome; //显示欢迎信息 

$str=” 当前在线用户: 

=================== 

”; 

$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; 

?> 

退出社区 

退出文件exit.php 

include "global.php";
//把global.php文件包含进来 

if ($_SESSION["online"]=="on"){ 

$con="userid=$userid"; 

$session->del($con);
//在session表中删除用户信息。 

session_destroy();
//结束当前的会话,并清空会话中的所有资源 

echo "已经退出社区......"; 



?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: