在操作之间访问Zend会话数据

时间:2009-11-06 11:27:19

标签: php zend-framework zend-session

这是我的问题 - 我正在尝试跨操作访问会话命名空间。 ZF示例似乎通过生成NEW命名空间来工作,但它们只在一个操作中演示了这一点 - 但是如何从单独的操作中访问现有命名空间?这是代码:

public function indexAction(){
    $defaultNamespace = new Zend_Session_Namespace('dingdangdoo');

    if (isset($defaultNamespace->numberOfPageRequests)) {
        // this will increment for each page load.
        $defaultNamespace->numberOfPageRequests++;
    } else {
        $defaultNamespace->numberOfPageRequests = 1; // first time
        }

    echo "Page requests this session: ",
    $defaultNamespace->numberOfPageRequests;
}

这很好 - 但是如果我想创建另一个Controller / Action对,我将如何访问$ defaultNamespace-> numberOfPageRequests?我是否必须创建Zend会话命名空间的新实例?

2 个答案:

答案 0 :(得分:2)

无论您是创建要在整个应用程序中使用的命名空间的单个实例,还是创建特殊命名空间的实例,它都取决于您。

当您创建Zend_Session_Namespace的实例时,您真正要做的就是获得一个标准接口到$ _SESSION超全局特定于一个'命名空间'。 sueprglobal中的“命名空间”只是$ _SESSION值数组的关联键。因此,当您使用命名空间实例修改任何数据时,修改可用于指向该特定命名空间的Zend_Session_Namespace的所有实例。

我更喜欢保持一切简单,所以我只是扩展Zend_Controller_Action,在preDispatch方法中,我处理身份验证,授权和任何会话创建。然后我通过将它们设置为My_Controller_Action的属性来使命名空间可用于所有操作。

答案 1 :(得分:0)

我遵循的方法是在引导程序中设置命名空间,使其在整个应用程序中可用。您可以从任何所需的控制器/操作中访问它。