ZF2:身份验证会话出现问题


ZF2 : Trouble with session for authentication

我在身份验证后的会话有一个奇怪的问题。

整个认证部分工作,麻烦随之而来:

        $result = $this->getAuthService()->authenticate();
            if ($result->isValid()) {
                $storage = $this->getAuthService()->getStorage();
                $storage->write(($this->getAuthService()
                        ->getAdapter()
                        ->getResultRowObject(array(
                                'email_utilisateur',
                                'password_utilisateur',
                            ))));
                $redirect = 'success';                    
            }

现在,我登录了,电子邮件+密码被存储在"Zend_Auth"密钥中(顺便说一句,不要注意我存储密码的事实,这是为了示例^^)。

但是当我转到另一个页面时(即使它是相同的),我的会话密钥"Zend_auth"被打破了,我有一个不完整的PHP对象....

Array
(
     [__ZF] => Array
         (
             [_REQUEST_ACCESS_TIME] => 1369667659.7526
         )
     [Zend_Auth] => __PHP_Incomplete_Class Object
        (
            [__PHP_Incomplete_Class_Name] => Zend'Stdlib'ArrayObject
        )
)

那么,你知道为什么改变页面会破坏我的会话变量吗?

提前感谢,我在这个问题上花了大约5个小时,测试了一些东西等等。

编辑28/05/2013:

所以,我还是没有找到。无论如何,被损坏的对象是一个Zend'Stdlib'ArrayObject。这个arrayobject被损坏的一个原因是会话在包含Zend'Stdlib' arrayobject之前开始。我会试着找出原因,但如果这就是原因,那么这就是框架的错误。顺便说一下,我使用的是ZF 2.2。

我找到了!如前所述,原因是会话在应用程序知道ArrayObject之前就开始了。你可以在这里看到:

https://zf2-docs.readthedocs.org/en/latest/modules/zend.session.advanced-usage.html

**Do not enable PHP‘s session.auto_start setting. If you do not have the ability to disable this.**

事情就是这样。会话。在我的php.ini中启用了Auto_start。为了解决这个问题,您必须在php.ini文件中将其设置为0:

php_value session.auto_start 0

如果您的PHP用于多个应用程序/站点,那么将这一行添加到您的.htaccess中:

php_value session.auto_start 0

这将覆盖php.ini

的实际值。