2

我有点困惑。我想知道什么是最好的解决方案。我是否必须在引导程序中启动会话,例如:

protected function _initSession()
{
    Zend_Session::start();
    $session = new Zend_Session_Namespace() ; 
    Zend_Registry::set("session", $session) ; 
} 

并在控制器中调用会话对象,例如

    $session = Zend_Registry::get("session") ; 

或者另一种选择是每次我需要在控制器中创建会话对象,例如

    $session = new Zend_Session_Namespace();

我想知道有什么区别?是否有任何内存问题或性能问题,例如我所假设的当我每次创建对象时它需要一些内存空间时:P 并且 Zend_Registry 只在内存中创建对象一次:D 你怎么想?

谢谢!此致

4

2 回答 2

1

Zend_Registry用于存储当前请求的对象/值。简而言之,您在 index.php 中提交给 Registry 的任何内容都可以从其他控制器/操作访问(因为每个请求首先通过 .htaccess 文件路由到 index.php 引导程序)。配置参数和数据库参数通常使用 Zend_Registry 对象准备好供全局使用。

Zend_Session_Namespace实际上使用 PHP 会话。使用 Zend_Session 存储的数据可以在不同/所有页面中访问。所以,如果你想在 /auth/login 脚本中创建一个名为 'UserRole' 的变量,并希望它可以在 /auth/redirect 中访问,你会使用 Zend_Session。

例如

如果您在注册表中存储了一个 DB 对象,并且当您访问一个页面时说登录页面,则该特定 DB 对象将可以被该页面中使用的任何文件访问(构造),这意味着全局访问(相同的关键字在PHP范围变量)。

而会话范围意味着您可以访问任何页面上的任何位置,直到您关闭浏览器(直到您的会话被销毁)。

编辑

Zend_Session用于在 PHP 中使用会话扩展。这将用于跟踪用户的登录等。

Zend_Registry用于在运行时存储对象/资源/等。这个想法是您可能希望在整个应用程序中使用 1 个配置对象或 1 个数据库。所以你会做什么,当你创建这些对象时,你会将它们分配给注册表。

这取决于您的要求,您想要使用哪种类型。

我希望现在很清楚。

于 2013-07-20T03:28:40.200 回答
0

正如您所描述的那样:不同的实例 - 在您描述它们的有限范围内 - 会有点浪费:它们都访问相同的底层会话存储,那么为什么要消耗资源来实例化第二个实例并将其加载到内存中呢?

于 2013-07-20T17:01:48.930 回答