日期:2014-05-20 浏览次数:20893 次
今天很是蛋疼!Zend_Session研究了半天没出结果,最后发现自己没有在入口文件处启用session!!搞的我一下午很郁闷,破电脑卡呀卡的很是恼火。。。下边把我小小成就讲给大家吧。
在php中,会话(session)代表服务器端与客户端之间的一种持久的状态数据。它的本质是一种数据,代表着服务器与客户端之间的一种状态。例如,论坛登录的用户数据、用户登录的时间、正在浏览的页面等都属于会话的范畴。
对于Session的介绍我不做过多的解释了,自己百度去吧。下边讲讲Zend_Session的基本用法
实现会话
要使用Zend_Session会话,需要以下几步。
1》引用命名空间类(Zend_Session_Namespace)
2》为命名空间类实例化一个对象。可以使用new关键字为实例化对象,其中要使用参数命名空间。如果不指定参数,则类的构造函数会使用默认的命名空间参数,其值为default。
3》使用Zend_Session_Namespace类的实例成员,可以对其进行赋值或者读取操作。
下面通过实例演示:
在此之前请大家检查自己在入口文件是否启用了Session(启用方法:Zend_Session::start();)。
我是将下面代码写到了控制器的方法里:
$mynamespace=new Zend_Session_Namespace('Myspace'); //实例化对象
if (isset($mynamespace->numberOfPageRequests))
//判断是否有值,当然没了。。。
{
$mynamespace->numberOfPageRequests++; //如果有的话累加
}
else
{
$mynamespace->numberOfPageRequests=1;
//如果没有的话给值为1
}
echo "用户的浏览次数为:";
echo "<font size=\"6\" color=\"#ff0000\">";
echo $mynamespace->numberOfPageRequests; //输出获取的对象成员值
echo "</font> 次";
运行结果:
可想而知。。。。 也就是每刷新一次页面,用户的浏览次数加1。
遍历会话命名空间
会话命名空间Zend_Session_Namespace 支持foreach(通过循环遍历所有成员的php语句)语句。基于此,可以使用foreach语句对会话命名空间进行迭代,以遍历会话命名空间中的全部的值。演示:
$myNamespace=new Zend_Session_Namespace('Myspace');
$myNamespace->webhost="127.0.0.1";
$myNamespace->hostname="localhost";
$myNamespace->user="root";
$myNamespace->password="321654";
$myNamespace->db_name="test";
$myNamespace->db_type="Mysql";
foreach ($myNamespace as $index => $value)
{
echo "命名空间myNamespace中的:".$index;
echo "为:".$value."<p>\n";
}
运行结果:
命名空间myNamespace中的:webhost为:127.0.0.1
命名空间myNamespace中的:hostname为:localhost
命名空间myNamespace中的:user为:root
命名空间myNamespace中的:password为:321654
命名空间myNamespace中的:db_name为:test
命名空间myNamespace中的:db_type为:Mysql
访问会话命名空间
访问会话命名空间可以使用通常对于一般变量的方法,如直接为变量赋值、直接读取变量的值、使用isset()函数判断其是否为null值、使用unset()来注销变量等。演示:
$login=new Zend_Session_Namespace('other');
$login->user="Administrator";
if (isset($login->user))
{
echo "\$login->user已经有值,其值为:";
echo $login->user;
unset($login->user);
}
else
{
echo "\$login->user无值";
}
echo "<p><p>";
if (isset($login->pass))
{
echo "\$login->pass 已经有值,其值为:";
echo $login->pass;
}
else
{
echo "\$login->pass无值@!";
echo "<p>";
$login->pass="12345679";
}
echo "<p>";
foreach ($login as $index => $value)
{
echo "命名空间login中的:".$index."为".$value."<p>\n";
}
运行结果:
$login->user已经有值,其值为:Administrator
$login->pass无值@!
命名空间login中的:pass为12345679
从运行结果可以看出一开始应为给$login->user赋值所有$login->user有值。但经过 unset($login->user);语句将变量注销所以后边命名空间遍历的时候而没有$login->user。还有一开始$login->pass确实是无值的,但是经过 $login->pass="12345679";赋值操作后,遍历命名空间时,有了$login->pass的值。大家可以仔细按程序流程走一边。
好了今天不早了,该回家了。希望和大家每天一起共同进步!