日期:2014-05-20  浏览次数:20907 次

ZendFramework学习第三章(核心组件—会话处理之Zend_Session基本用法)

今天很是蛋疼!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的值。大家可以仔细按程序流程走一边。


好了今天不早了,该回家了。希望和大家每天一起共同进步!