このコードに基づいて独自の Zend_Session_SaveHandler をセットアップしようとしています http://blog.digitalstruct.com/2010/10/24/zend-framework-cache-backend-libmemcached-session-cache/
私の session_id が不思議な振る舞いをすることを除いて、これはうまくいきます。上記のブログで見つけることができるように、私は Zend_Session_SaveHandler_Cache クラスを使用しています (ただし、私は自分のライブラリに駐車しているので、名前は My_ で始まります)。
私のブートストラップには次のものがあります。
protected function _initSession()
{
$session = $this->getPluginResource('session');
$session->init();
Zend_Session::getSaveHandler()->setCache( $this->_manager->getCache( 'memcached' ) );
}
.ini ファイルのこのコードに基づいてセッションを開始するには
resources.cachemanager.memcached.frontend.name = Core
resources.cachemanager.memcached.frontend.options.automatic_serialization = On
resources.cachemanager.memcached.backend.name = Libmemcached
resources.cachemanager.memcached.backend.options.servers.one.host = localhost
resources.cachemanager.memcached.backend.options.servers.one.port = 11213
ここまでは順調ですね。誰かがログインしようとして Zend_Session::rememberMe() が呼び出されるまで。Zend_Session のコメントで読むことができます
通常、「rememberMe()」はセキュリティ コンテキストの変更を表すため、新しいセッション ID を使用する必要があります
もちろん、これは非常に真実であり、新しいセッション ID が生成されます。ログインに成功すると、ユーザーの Zend_Auth データがこの新しいセッションに書き込まれます。これは、ブログの元のクラスにログ機能を追加したためです。
そして、ここで問題が発生します。Zend_Session は古い ID のセッション データを読み取り続けるため、この新しい ID は Zend_Session に渡されないようです。つまり、Zend_Auth インスタンスのないものです。したがって、ユーザーはログインできなくなります。
問題は、再生成後に saveHandler を新しい ID で動作させる方法です。どんな助けにも乾杯。