2

このコードに基づいて独自の 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 で動作させる方法です。どんな助けにも乾杯。

4

1 に答える 1

2

わかりました、私はここで顔を赤らめています....私はこのエラーを見つけるのに間違った場所を見ていました。私のセッション saveHandler は問題なく動作していました (したがって、 libmemcached セッション管理が必要な場合は、Mike Willbanks 氏の作業をお勧めします)。

何がうまくいかなかったのですか?ファイルから libmemcached に切り替えるだけでなく、ブートストラップでのセッションのセットアップから、application.ini でのセットアップに切り替えました。したがって、次のような行を入れる代わりに

session.cookie_domain = mydomain.com

私のapplication.ini(その後、セッションをセットアップするためのオプションとしてブートストラップで使用されました)で、私は今、適切に書きました

resources.session.cookie_domain = mydomain.com

そして、これは問題が発生したためです....私は本番用にこれらの行を変更しただけで、ini ファイルのさらに下にある行を変更するのを忘れていました。つまり、私の開発環境。本番環境の cookie_domain を取得しましたが、開発中に別のドメイン名を使用しているため、これは間違っています。そのため、ページが読み込まれるたびに、Cookie が無効になり、新しいセッションが開始されました。謎が解けた…

于 2012-12-20T09:40:17.520 に答える