5

セッションのバックエンドとして memcache を使用するメイン ドメインにレガシー PHP アプリケーションがあります。これはうまくいきます。メイン ドメインで作成される同じセッションを共有できるサブドメインに新しい Zend Framework アプリケーションを追加しようとしています。

application.ini でセッションと savehandler を構成しています。

resources.session.saveHandler.class = "App_Session_SaveHandler_Cache"
resources.session.saveHandler.options.type = "Libmemcached"
resources.session.saveHandler.options.maxlifetime = 300
resources.session.saveHandler.options.front.lifetime = 300
resources.session.saveHandler.options.front.automatic_serialization = true
resources.session.saveHandler.options.back.servers.0.host = "127.0.0.1"
resources.session.saveHandler.options.back.servers.0.port = 11211
resources.session.saveHandler.options.back.servers.0.persistent = true
resources.session.saveHandler.options.back.servers.0.status = true
resources.session.saveHandler.options.back.servers.1.host = "127.0.0.2"
resources.session.saveHandler.options.back.servers.1.port = 11211
resources.session.saveHandler.options.back.servers.1.persistent = true
resources.session.saveHandler.options.back.servers.1.status = true

セッション保存ハンドラ クラス (App_Session_SaveHanlder_Cache は Zend_Session_SaveHandler_Interface を実装し、Zend_Cache ファクトリを使用してバックエンド ストレージの Libmemcached オプションを渡します。

私のブートストラップでは、セッション ブートストラップを呼び出す最初のメソッドとしてリストされている _init メソッドがあります。

protected function _initForceSession()
{   
    $this->bootstrap('session');
    Zend_Session::start();
}

サブドメインのメイン ドメインの既存のセッションが存在する場合はそれを引き続き使用し、まだ存在しない場合は新しいセッションを作成できるようにしたいと考えています。

レガシー アプリケーションで作成された新しいアプリケーションのセッション ID を正常に読み取ることができます。ただし、新しいアプリケーションで実際にセッション自体を読み取ることはできません。

新しいアプリケーションから (セッションをバイパスして) memcache を直接読み取ろうとしたところ、その方法でセッション データを取得できました。

ここで何が欠けていますか?

4

0 に答える 0