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 数据被写入这个新会话。我可以看到这一点,因为我在博客的原始类中添加了一些日志记录功能。

这就是事情出错的地方。这个新 id 显然没有在 Zend_Session 上传递,因为 Zend_Session 一直在读取旧 id 的会话数据。换句话说,没有 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

And this is were things went wrong, because.... I only changed those lines for production, I forgot to change them further down the ini file. In other words, my development env. got the cookie_domain of my production env., which is wrong as I use an other domain name during devolepment. So, on every page load, my cookie was invalidaded and a new session started. Mysterie solved...

于 2012-12-20T09:40:17.520 回答