zf2会话验证失败

Ace*_* Eu 2 php validation session doctrine zend-framework2

我正在使用zf2,rbcomments,doctrine,zfcuser和samuser实体...我有一个问题,在onbootstrap之前,我的应用程序抛出"会话验证失败"错误.除了身份验证之外,我不会在任何地方使用会话(由zfcuser完成,而不是手动完成).这是调用堆栈:

Additional information:
Zend\Session\Exception\RuntimeException
File:
C:\wamp\www\vendor\zendframework\zendframework\library\Zend\Session\SessionManager.php:111
Message:
Session validation failed
Stack trace:
#0 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\Session\AbstractContainer.php(78): Zend\Session\SessionManager->start()
#1 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\Authentication\Storage\Session.php(63): Zend\Session\AbstractContainer->__construct('Zend_Auth', NULL)
#2 C:\wamp\www\vendor\zf-commons\zfc-user\src\ZfcUser\Authentication\Storage\Db.php(116): Zend\Authentication\Storage\Session->__construct()
#3 C:\wamp\www\vendor\zf-commons\zfc-user\src\ZfcUser\Authentication\Storage\Db.php(42): ZfcUser\Authentication\Storage\Db->getStorage()
#4 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\Authentication\AuthenticationService.php(134): ZfcUser\Authentication\Storage\Db->isEmpty()
#5 C:\wamp\www\vendor\zf-commons\zfc-user\src\ZfcUser\View\Helper\ZfcUserIdentity.php(23): Zend\Authentication\AuthenticationService->hasIdentity()
#6 [internal function]: ZfcUser\View\Helper\ZfcUserIdentity->__invoke()
#7 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php(400): call_user_func_array(Object(ZfcUser\View\Helper\ZfcUserIdentity), Array)
#8 C:\wamp\www\module\Application\view\layout\layout.phtml(118): Zend\View\Renderer\PhpRenderer->__call('zfcUserIdentity', Array)
#9 C:\wamp\www\module\Application\view\layout\layout.phtml(118): Zend\View\Renderer\PhpRenderer->zfcUserIdentity()
#10 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php(507): include('C:\\wamp\\www\\mod...')
#11 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\View\View.php(205): Zend\View\Renderer\PhpRenderer->render(Object(Zend\View\Model\ViewModel))
#12 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\Mvc\View\Http\DefaultRenderingStrategy.php(102): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
#13 [internal function]: Zend\Mvc\View\Http\DefaultRenderingStrategy->render(Object(Zend\Mvc\MvcEvent))
#14 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#15 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('render', Object(Zend\Mvc\MvcEvent), Array)
#16 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\Mvc\Application.php(347): Zend\EventManager\EventManager->trigger('render', Object(Zend\Mvc\MvcEvent))
#17 C:\wamp\www\vendor\zendframework\zendframework\library\Zend\Mvc\Application.php(300): Zend\Mvc\Application->completeRequest(Object(Zend\Mvc\MvcEvent))
#18 C:\wamp\www\public\index.php(26): Zend\Mvc\Application->run()
#19 {main}
Run Code Online (Sandbox Code Playgroud)

更多可以帮助的信息(唯一尚未添加的监听器):

public function onBootstrap(MvcEvent $mvcEvent)
{
    $zfcServiceEvents = $mvcEvent->getApplication()->getServiceManager()->get('zfcuser_user_service')->getEventManager();
    $zfcServiceEvents->attach('register', function($e) use($mvcEvent) {

        $app = $mvcEvent->getApplication();
        $sm = $app->getServiceManager();
        $user = $e->getParam('user');
        $entityManager = $sm->get('Doctrine\ORM\EntityManager');
        $roleRepo = $entityManager->getRepository('SamUser\Entity\Role');
        $defaultRole = $roleRepo->findOneBy(array('id'=>2));
        $user->addRole($defaultRole);
    });
}
Run Code Online (Sandbox Code Playgroud)

我尝试了一些东西(比如在供应商中打印会话,似乎没什么不对的)......任何想法?

Ps我怀疑它与布局有关,我试图通过使用来查看用户是否具有身份 if(!$this->zfcUserIdentity()){

Der*_*huk 5

当谷歌Chrome更新时,我发生了这种情况,更改了其UserAgent字符串.会话验证通知,并抛出异常.查看您的配置['session_manager']['validators']并删除HttpUserAgent.

您现有的会话仍然需要通过删除其cookie来烘烤,然后继续进行此UserAgent检查将不会发生.

(如果没有大爆炸的话,悄悄地开始一个新的会议将是一件好事.我正在研究它...)

  • 我已经创建了一个ZF2 Composer模块,可以在无效会话中表现得很好.就在这里:https://packagist.org/packages/beaucal/beaucal-invalid-session (3认同)