ZF2 ZfcUser,BjyAuthorise,退出问题

时间:2015-09-14 07:33:00

标签: php session zend-framework2 logout zfcuser

在以下情况下退出Web应用程序:

  1. 双击任何公开锚链接(例如,连续两次点击我们)
  2. 使用ajax自动完成调用(例如使用Jquery.autocomplete)
  3. 使用CKeditor并上传图像(KCFinder上传到服务器)
  4. 打开2个或多个标签,然后快速点击每个标签中的链接
  5. 通过注销,我的意思是BJauthorise(zend开发人员工具)在行动之前看到我的角色(例如成员,memberplus等)。 如果我执行上述任何操作,zfcuser / bjyauthorise似乎失去了它的会话/ cookie?我得到了禁止的#39; BJYauthorise显示的页面。 然后缺少所有zfcuser信息,我需要再次登录。

    环境: zf2,zfcuser,bjyautorise +自定义路线。

    我在模块/ Member / Module.php

    中有这个
     'Zend\Session\SessionManager' => function ($sm) {
                        $config = $sm->get('config');
                        if (isset($config['session'])) {
                            $session = $config['session'];
    
                            $sessionConfig = null;
                            if (isset($session['config'])) {
                                $class = isset($session['config']['class'])  ? $session['config']['class'] : 'Zend\Session\Config\SessionConfig';
                                $options = isset($session['config']['options']) ? $session['config']['options'] : array();
                                $sessionConfig = new $class();
                                $sessionConfig->setOptions($options);
                            }
    
                            $sessionStorage = null;
                            if (isset($session['storage'])) {
                                $class = $session['storage'];
                                $sessionStorage = new $class();
                            }
    
                            $sessionSaveHandler = null;
                            if (isset($session['save_handler'])) {
                                // class should be fetched from service manager since it will require constructor arguments
                                $sessionSaveHandler = $sm->get($session['save_handler']);
                            }
    
                            $sessionManager = new SessionManager($sessionConfig, $sessionStorage, $sessionSaveHandler);
    
                            if (isset($session['validator'])) {
                                $chain = $sessionManager->getValidatorChain();
                                foreach ($session['validator'] as $validator) {
                                    $validator = new $validator();
                                    $chain->attach('session.validate', array($validator, 'isValid'));
    
                                }
                            }
                        } else {
                            $sessionManager = new SessionManager();
                        }
                        Container::setDefaultManager($sessionManager);
                        return $sessionManager;
                    },
    

    我一直在试图找出造成这种情况的原因,最初的想法是会议再生。我的本地测试计算机是相对加载的(即很慢)所以我假设ZF2尝试重新生成以某种方式锁定的会话然后说'嘿,你还没有登录,我要去清理会议并把你踢出去......!'但这不是一个明确的结论。

    是否有人知道或有任何与此类或类似问题相关的经验,而不是随意的'尝试访问其网站时注销?

    我应该进一步查看会话还是完全处于错误的区域?

    更新: 看着网络'在chrome developer tools工具栏中:在连续点击2个不同链接的简单示例中,保留的网络日志显示初始请求已取消,下一个请求(即点击的第二个链接)显示403禁止回应。 即我在一个由路线防护装置控制的区域内有2个链路(链路A和链路B)。 如果我单击链接A并且页面开始请求/响应过程,我通过单击链接B中断此操作,然后链接A被取消'并且链接B突然未经身份验证。 这个'取消'请求似乎是所有情况下的共同主题,是导致我进退两难的原因。 请以任何方式帮助。 附:我将尝试从一个新的ZendSkeletonApp / ZfcUser / BJAuthorise开始,看看是否会发生这种情况,但还没有时间对此进行调查。

1 个答案:

答案 0 :(得分:0)

我相信这是人为错误! 如上所述,问题最有可能出现在bootstrap()方法的Module.php中。 尝试重新生成会话ID会导致错误。

//$sm =  $e->getApplication()->getServiceManager(); 
    //$session = $sm->get('Zend\Session\SessionManager');
    //$session->start();
    //var_dump($_SESSION);

    $container = new Container('wadmin');
    if (!isset($container->adminId)) {
        //$session->regenerateId(true);
        $container->adminId = null;
    }

同样,人为错误,我只是在我开始处理管理部分后才意识到。 我不相信这篇文章会帮助任何人,所以最好放弃它......?