1

私はあなたたちの誰かが以前にこの問題に遭遇したことがあるかどうかを確認するために書いています、そしてそれが私に起こった理由を理解する機会があります。

これが物語です。

Zend Framework v。1.8より前に多くのZFアプリケーションを開発しましたが、その後約18か月間停止しました。今度は、ZendFrameworkを再度使用することにした新しいプロジェクトを開始する必要がありました。

ローカルサーバーにバージョン1.11.3がインストールされていたため、最新リリースをダウンロードしませんでした。

Bootstrap.phpファイルでZend_Applicationを使用する前は、セッションオプションを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();

さまざまな便利なメソッドを備えたカスタムグローバルクラス:

    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に書き込まれませんでした...

誰か、これが正常な動作であるかどうかを教えてください(多分私はどこかで何かを逃したかもしれません...)?

明らかに、以前の方法を再実装することで問題を解決しました(そしてそれは完全に機能します)が、正しく使用する方法を学びたいと思います。

前もって感謝します。

4

2 に答える 2

1

これはそれをオンにする場合であるはずであり、それは機能します、それを簡単にしたかもしれません。

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

リファレンスマニュアルによると

セッション構成オプションを設定するには、Zend_Session :: setOptions()に渡される配列のキーとしてベース名(「session。」の後の名前の部分)を含めます。

オプションを正しく設定すると、ブートストラップ_initSession()が正常に機能するはずです。

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

PS私は常にZend_Session_Namespaceを使用していますが、グローバルセッションを扱うことはめったにありません。

于 2012-05-23T04:19:36.693 に答える
0

Bootstrap.php に追加

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

セッションオプションはapplication.iniで設定できます

于 2012-05-22T15:56:35.170 に答える