在以下情况下退出Web应用程序:
通过注销,我的意思是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开始,看看是否会发生这种情况,但还没有时间对此进行调查。
答案 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;
}
同样,人为错误,我只是在我开始处理管理部分后才意识到。 我不相信这篇文章会帮助任何人,所以最好放弃它......?