我正在尝试根据此代码设置自己的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工作? 欢呼任何帮助。
答案 0 :(得分:2)
好的,我在这里脸红了.... 我正在寻找错误的地方找到这个错误。我的会话saveHandler运行得很好(如果你想要libmemcached会话管理,我可以推荐Mike Willbanks his work。)
那出了什么问题呢?好吧,除了从文件切换到libmemcached之外,我还从设置我在bootstrap中的会话切换到在我的application.ini中设置它。所以,而不是像
那样放线session.cookie_domain = mydomain.com
在我的application.ini中(然后在bootstrap中用作设置会话的选项),我现在正确地写了
resources.session.cookie_domain = mydomain.com
这就是出了问题,因为......我只是改变了那些生产线,我忘了将它们更改为ini文件。换句话说,我的发展环境。得到了我的生产环境的cookie_domain,这是错误的,因为我在devolepment期间使用其他域名。因此,在每次加载页面时,我的cookie都被无效并启动了新会话。 Mysterie解决了......