【问题标题】:Zend_Session problemsZend_Session 问题
【发布时间】:2009-08-16 15:29:02
【问题描述】:

我已经阅读了..网上的一些文章,但我不明白:|,你们能给我举个例子吗,如何制作这样的东西:$_SESSION['name'] = 'value';echo $_SESSION['name']。我怎样才能用 ZF 创建这样的东西?

最好的问候,

【问题讨论】:

    标签: php zend-framework session


    【解决方案1】:

    将其放在页面顶部,在其他任何内容之前:

    <?php
        Zend_Session::start();
    
        if(!Zend_Registry::isRegistered('session'))
        {
           $session = new Zend_Session_Namespace('YourSiteName');
           Zend_Registry::set('session', $session);
        }
    ?>
    

    修改会话:

    <?php
        $session = Zend_Registry::get('session');
        $session->user_name = $user_name;
    ?>
    

    阅读您的会话:

    <?php
        $session = Zend_Registry::get('session');
        echo 'Hello '.$session->user_name.' !';
    ?>
    

    或者查看当前会话命名空间中的所有值:

    <?php
        $session = Zend_Registry::get('session');
    
        foreach ($session as $index => $value) 
        {
           echo "session->$index = '$value';<br />";
        }
    ?>
    

    【讨论】:

    • 不起作用。
      致命错误:在 C:\wamp\www\whitestarbooking\Zend\Registry.php:145 堆栈中显示未捕获的异常“Zend_Exception”和消息“没有为密钥“会话”注册条目”跟踪:#0 C:\wamp\www\whitestarbooking\application\admin\controllers\UploadsController.php(253): Zend_Registry::get('session') #1 C:\wamp\www\whitestarbooking\Zend\Controller\ Action.php(512): Admin_UploadsController->artistsphotosuploadAction() #2 C:\wamp\www\whitestarbooking\Zend\Controller\Dispatcher\Standard.php(288): Zend_Controller_Action->dispatch('artistsphotosup...' ) #3 C:\.......
    • 尝试将:if(!Zend_Registry::get('session')) 更改为:if(!isset(Zend_Registry::get('session')))
    • 使用 Zend_Registry::isRegistered('session') 测试是否设置了一个键
    • 除了Zend_RegistryZend_Session_Namespace 之外,此代码还可以使用一些Zend_Http_CookieJar ;)
    【解决方案2】:

    使用 Zend Framework 时,不应直接使用 $_SESSION,而应使用 Zend_Session 类。

    您可能会在 Basic Usage 手册页上找到问题的答案。

    例如,要使用存储在会话中的numberOfPageRequests,您可以使用如下内容:

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

    我承认,直接使用$_SESSION 可能看起来有点复杂......但这为您提供了一个连贯的、面向对象的界面——至少是这样的^^


    当然,您可能需要在此之前启动会话,使用

    Zend_Session::start();
    


    如果您还有其他更具体的问题,请随时提问!

    【讨论】:

      【解决方案3】:

      您可以这样做(如教程所述):

      $defaultNamespace = new Zend_Session_Namespace('Default');
      
      if (isset($defaultNamespace->name))
      {
          echo $defaultNamespace->name;
      } 
      else 
      {
          $defaultNamespace->name = "hi";
      }
      

      首先,您需要使用以下方法创建会话对象:

      $defaultNamespace = new Zend_Session_Namespace('Default');
      

      通过定义自定义值来代替默认值,这意味着您的任何变量都不会与来自其他系统或系统中使用唯一值代替默认值的其他部分的变量混合。

      之后,每个变量都可以像普通的类变量一样被访问

      任何变量都可以用

      赋值
      $defaultNamespace->variable_name = value;
      

      要获取任何值,只需获取相同的值即可;

      $variable - $defaultNamespace->variable_name; // gets value
      

      正如 Pascal 所说,您还需要调用

      Zend_Session::start();
      

      在这一切之前。

      要了解更多信息,请使用Basic Usage Examples.

      【讨论】:

      • 如果我想在另一个页面中使用会话?我需要使用 Zend_Registry 注册会话,还是?
      • 不用,直接拨打同一行new Zend_Session_Namespace('Default')
      • 嗯,是的,我知道,但是我的操作是由一个名为 uploadify 的 jquery 插件访问的,我不知道,为什么不设置会话,我也尝试过使用 $_SESSION,并且Zend_Registry,例如,如果我尝试在另一个操作中调用会话或注册表名称,则不起作用:|
      • 而且,是的,我有 Zend_Session::start();在我的引导程序上,我正在使用会话,在我网站的其他部分,问题可能出在脚本...
      猜你喜欢
      • 1970-01-01
      • 2012-03-12
      • 2012-03-19
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      相关资源
      最近更新 更多