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 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
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="
[url=exit.php]退出社区[/url]";
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;
?>
[url=exit.php]退出社区[/url]
退出文件exit.php
include "global.php"; //把global.php文件包含进来
if
($_SESSION["online"]=="on"){
$con="userid=$userid";
$session->del($con); //在session表中删除用户信息。
session_destroy();
//结束当前的会话,并清空会话中的所有资源
echo "已经退出社区......";
}
?>
php里session的用法的更多相关文章
- 一招制胜---详解分布式系统里session同步
一招制胜---详解分布式系统里session同步 几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同 ...
- thinkPHP中session()方法用法详解
本文实例讲述了thinkPHP中session()方法用法.分享给大家供大家参考,具体如下: 系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成. 用法 ? ...
- 数据库的修改和删除;比较标签代替<,>,=号;模板替换;session的用法
注: 1.session:系统默认开启;用途:防止跳过登录(只能访问登录方法);session和cookie的用法(手册->专题); 赋值:session('name','value'); 取值 ...
- Session,ViewState用法
基本理论: session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, ...
- Hibernate(或其它ORM)里的inverse用法详解,内容摘自Java web轻量级开发面试教程
本文来是从 java web轻量级开发面试教程从摘录的. Inverse的英文含义是反转,在Hibernate中用来决定是由哪方来维护两个业务实体类之间的关联关系,具体而言,就是由哪方去设置这个被外键 ...
- php 中cookie和session的用法比较
1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session. ...
- 分布式系统里session同步的那些事儿
几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同学一起所谓创业的时候,也遇到了类似的问题.当时查了 ...
- session cookie用法
1.session(1)session存储在服务器的(2)session每个人存一份(3)session有默认的过期时间(4)session里面可以存储任意类型的数据安全,对服务造成压力用法:1.当一 ...
- python Cookie Session 相关用法
Cookie一.前言1.http协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响 应情况直接影响,也不会直接影响后面的请 ...
随机推荐
- 【C++】利用指针实现通过函数改变多个参数的值
写惯了python,对于C++的语法越来越生疏,不同于python中函数可以return多个变量,C++的函数要想返回多个参数可以利用指针实现. 因为在函数内部的变量都是局部变量,所以当参数传入函数中 ...
- Scrambled Polygon---poj2007(利用叉积排序)
题目链接:http://poj.org/problem?id=2007 题意:乱序给出凸多边形的顶点坐标,要求按逆时 针顺序输出各顶点.给的第一个点一定是 (0,0),没有其他点在坐标轴上,没有三点 ...
- JMeter学习-006-Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002 解决办法(windows 7)
好久没用 JMeter 了,今天启动的时候,发现启动命令行窗口出现了警报,警告信息如下图所示:
- JMeter学习-001-JMeter初识
Apache JMeter是Apache组织开发的基于Java的开源压力测试工具(个人发现也可用于接口测试).用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于 ...
- 常用公共的css的样式
html{-webkit-text-size-adjust:none; /*解决chrome浏览器下字体不能小于12px*/} body{overflow-x: hidden; font-size:1 ...
- each的详解
首先我还是先观察w3c讲解: 先写一段代码,如图: 定义:each() 方法规定为每个匹配元素规定运行的函数. 提示:返回 false 可用于及早停止循环.(我在代码中加了return false,发 ...
- perl常见符号
=> 键值对,左键右值 -> 引用,相当于java中的 [对象.方法名]中的点号 :: 表示调用类的一个方法 % 散列的标志,定义一个键值对类型的 @ 数组的标志 $ 标量的标志 =~ ...
- Speed-BI 多事实表与表间计算的应用:销售目标达成分析 另一种实现方法
在前一篇<Speed-BI多事实表与表间计算的应用(excel多Sheet关联分析):销售目标达成分析>http://www.powerbibbs.com/forum. ... 7583& ...
- [转载]如何破解Excel VBA密码
原文链接:http://yhf8377.blog.163.com/blog/static/1768601772012102111032840/ 在此之前,先强调一下,这个方法只是用来破解Excel内部 ...
- c# yyyyMMdd,dd/MM/yyyy 类型字符串转换为datetime 类型
DateTime ConvertDate = DateTime.ParseExact("20140504", "yyyyMMdd", null, System. ...