基本的Session使用方法
【ChinaByte 教程】以下就是一个以用户登陆和注销为例子的Session使用例子,通过它你就会明白如何使用session以及Session是如何起作用的。你也会体会到使用了Phplib/Zsulib的好处和带来的便利。
a.建立一个Session的类
class slashSess extends Session
{
var $classname = "slashSess"; // 和定义DB_Sql的道理一样
var $magic = "fkIsNotEqualToIK"; // 随机化Session的字符串,建议用函数生成唯一串
var $mode = "cookie"; // 在GET模式时使用cookie
var $lifetime = 86400; // session cookie的生存时间(单位:秒)
var $that_class = "slash_sql"; // 要使用的目标数据库名字(一般情况并没用上)
var $allowcache = "no"; // 是否使用缓冲?有3个选项:no/public/private
}
注意:其中slashSess这个名字可随便修改的,但是和定义DB_Sql的extends一样要保证和$classname名字一样就可以了。其中这个定义了类slashSess的式子中,$magic的字串建议使用随机函数产生独立的字串以避免重复。以下我给出一个小函数,以生成一个指定字长的独立随机串:
/*******************************************************************
function: unimagic() 版本:1.0 日期:2000/8/9 编写地:北京
parameter: $length 需要产生的随机串的长度,默认是8位,最长32位 *******************************************************************/
function unimagic($length="8")
{
srand((double)microtime()*1000000);
$ran = rand();
$md5 = md5($ran);
$magic = substr($md5,0,$length);
return $magic;
}
b.使用Session功能
本部分配合例子Login.php来说明如何运用Phplib/Zsulib中session.inc文件中相关函数/类,这里分几个部分:
利用page_open函数打开一个类对应方法的数组;
注册提交的一些参数;
利用page_close函数关闭页面同时保存注册的信息;
释放注册的参数。结束一个Session会话。
这个小程序的流程(为了突出重点,这里尽量简化程序,多余的部分全部删除) 初始化页面--->page_open调用Session(开始)--->$op=login,注册提交参数
$op=logout,释放参数。
1.初始化页面
这里需要用到两个类slashDB和slashSess;其中这两个类都在前面文档中提到。这两个类假定存放在config.php文件里。因此首先必须包含这个文件以便可以调用这两个类。
//////////////////////////////////
//范例页面 ver 0.1 2000/8/24 //
//$ID:Login.php By hzqbbc in hp$//
//////////////////////////////////
require "config.php";
//开始定义函数
function display_login() { 内容 }
function error_msg() { 内容 }
//结束定义函数
2.page_open调用Session开始
//调用page_open函数,其中slashSess是在config.php定义好的类
page_open(array("sess"=>"slashSess"));
注意:尽量不要在page_open前require一些会产生html代码或者进行输出html代码的操作。否则会出现提示说已经发送了Header信息而不能再次发送的错误。
3.如果$op=login,进行登陆操作并注册信息:
if ($op=="login")
{
if (isset($passwd) && isset($username)) //判断用户名和密码是否空?否就继续
{
$sl_q = new slashDB;//调用类
$q = "SELECT seclev FROM user WHERE username='$username'
AND passwd='$passwd'";
$sl_q->query($q);//查询结果
//如果结果非空(意味着用户密码名字都正确)就继续
if ($sl_q->next_record())
{
$seclev = $sl_q->Record["seclev"];//给$seclev赋值
//调用register函数,将所有需要记录的变量全部注册
$sess->register("username");
$sess->register("seclev");
$sess->register("passwd");
}
}
}
4.如果$op=logout,进行注销信息操作
if ($op=="logout")
{
//调用delete函数删除注册的变量
$sess->delete();
//删除后,对变量进行重新赋值并初始化成原始状态
$seclev = "0";
$passwd = "";
$username = "";
exit;
echo "你已经注销了!";
}
5.结束本程序
在结束前必须调用page_close();这样就完成了一个完整的Session会话。 如果已经执行了logout操作就不要执行了。所以完整语句是:
if ($op!="logout") page_close();
结束:一定要注意程序编写顺序,否则会产生逻辑错误。本例子就是一个最简单的用户登陆的模型所有采用Phplib的用户管理模式都和这个差不多。
|