zf2会话验证失败

时间:2014-08-26 17:46:53

标签: php validation session zend-framework2 doctrine

我正在使用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}

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

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);
    });
}

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

P.S。我怀疑它与布局有关,我试图通过使用if(!$this->zfcUserIdentity()){

来查看用户是否具有身份

1 个答案:

答案 0 :(得分:5)

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

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

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