2013-07-19 44 views
2

我有點困惑。我想知道什麼是最好的解決方案。我應該發起會話像引導:在Zend Registry中設置會話或每次創建會話的新實例?

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您的想法是什麼?

謝謝! 祝好運

回答

1

Zend_Registry用於存儲當前請求的對象/值。簡而言之,您可以從其他控制器/操作中訪問您在index.php中提交給Registry的任何內容(因爲每個請求都首先通過.htaccess文件路由到index.php引導程序)。通常使用Zend_Registry對象爲全局使用配置參數和db參數。

Zend_Session_Namespace實際上使用PHP會話。使用Zend_Session存儲的數據可以在不同的/所有頁面中訪問。所以,如果你想在/ auth/login腳本中創建一個名爲'UserRole'的變量,並且希望它可以在/ auth/redirect中訪問,你可以使用Zend_Session。

對於實例

,如果您有存儲在註冊表中的DB對象,而當你訪問一個頁面說的登錄頁面,這個特殊的數據庫對象可以被訪問到任何使用的文件該頁面(構造),意思是全局訪問(PHP Scope Variable中的同一個關鍵字)。

而會話範圍意味着你可以訪問任何頁面的任何地方,直到你關閉瀏覽器(直到你的會話被銷燬)。

EDIT

Zend_Session組件是用於與PHP.This會話擴展工作將是在(多個)用戶跟蹤洛等

要是Zend_Registry用於存儲對象/ resources/etc在運行時。這個想法是,你想要在整個應用程序中使用1個配置對象或1個數據庫。所以當你創建這些對象時,你會做什麼,你會將它們分配給註冊表。

這取決於您的要求,您要在哪種類型中使用它們。

我希望現在很清楚。

+0

我知道Zend_Registry具有全局範圍,Zend_Session使用php會話。但問題是,當我創建類的新實例時,它會在內存中獲得一些空間。所以我假設在Zend_Registry中存儲會話對象是更好的選擇?你怎麼看? –

+0

@FaisalRehman,請檢查我的更新答案 – liyakat

0

區別在於您所描述的:不同的實例 - 在您描述它們的有限範圍內 - 會略微浪費:它們都訪問相同的基礎會話存儲,爲什麼要消耗資源實例化並加載第二個實例記憶?