簡體   English   中英

使用Zend_Application的奇怪Zend_Session行為

[英]Strange Zend_Session behaviour using Zend_Application

我正在寫信,看看你們中是否有人以前曾遇到過此問題,並且有機會了解我為什么會發生此問題。

這就是故事。

我在Zend Framework v。1.8之前開發了許多ZF應用程序,但是我停了大約18個月。 現在,我不得不開始一個新項目,決定再次使用Zend Framework。

在本地服務器上,我安裝了1.11.3版本,因此沒有下載最新版本。

在將Zend_Application與Bootstrap.php文件一起使用之前,我曾經開始過會話,將會話選項放在config.ini文件中,然后將其加載到Zend_Session實例中,如下所示:

config.ini

sessions.name = NAME
sessions.use_only_cookies = 1
sessions.save_path = APPLICATION_PATH "/../tmp/sessions"
sessions.strict = on
sessions.remember_me_seconds = 1800

在啟動應用程序之前將index.php(進入公共Web服務器目錄):

Globals::startSession();

具有各種有用方法的自定義Globals類:

    class Globals
    {
            static public function startSession()
            {
            $sessions_conf = self::getConfig()->sessions;
            Zend_Session::setOptions($sessions_conf->toArray(););
            Zend_Session::start();
            }
    }

這一直很好,可以啟用我的會話(與Zend_Session_Namespace一起使用)並將會話文件存儲在save_path中。

使用Zend_Application,該手冊告訴您將會話選項簡單地存儲在application.ini文件中“部分”資源下,並且Zend_Session將自動配置。

我這樣做是這樣的:

; SESSIONS
resources.session.name = NAME
resources.session.use_only_cookies = 1
resources.session.save_path = APPLICATION_PATH "/../tmp/sessions"
resources.session.strict = on
resources.session.remember_me_seconds = 1800

它沒有用。 因此,我嘗試(而不是同時使用!)Bootstrap.php文件中的_initSession()和_initForceSession()方法,將它們放在類的開頭並向其中寫入代碼:

$this->bootstrap('session');

但是會話永遠無法正常工作,數據沒有存儲在http請求之間,會話文件也從未寫入save_path ...

有人能告訴我這是否是正常行為嗎(也許我在某處錯過了某物...)?

顯然我解決了重新實現我的舊方法的問題(並且效果很好),但是我想學習如何正確使用它。

提前致謝。

這應該是打開它並起作用的情況,可能使它變得容易。

我認為您可能對如何在application.ini中設置選項有疑問:

; SESSIONS
resources.session.name = NAME
resources.session.name.use_only_cookies = 1
resources.session.name.save_path = APPLICATION_PATH "/../tmp/sessions"
resources.session.name.strict = on
resources.session.name.remember_me_seconds = 1800

根據參考手冊

要設置會話配置選項,請包括基本名稱(名稱在“ session。”之后的部分)作為傳遞給Zend_Session :: setOptions()的數組的鍵。

正確設置選項后,引導程序_initSession()應該可以正常工作。

public function _initSession()
{
Zend_Session::start();
}

PS我一直使用Zend_Session_Namespace,但很少處理全局會話。

在您的Bootstrap.php中添加

public function _initSession()
{
Zend_Session::start();
}

會話選項可以在application.ini中設置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM