嗨,伙计们!我不是土生土长的英语,所以如果你能纠正我的句子,我将不胜感激!
为了解释我的问题,这里是我们的开发环境。
语言:php7.3.11
框架:zend framework v3.3.11
服务器:aws ec2×4
服务器操作系统:amazonlinux 2
redis已经启用,有两个项目像a-project/ec2×2(a-ec2)b-项目/ec2×2(b-ec2)
a-ec2和b-ec2的唯一区别是源代码,其他设置如nginx、php-fpm、redis和db设置都是相同的。
如果我缺少一些信息,请告诉我
当我们联合这些项目时,问题就发生了。
登录我们的服务后,zend工作异常。登录操作在a-ec2上,我们可以用它成功登录。我们把会话信息保存在redis上,它可以正常工作。但这只是我们第一次将服务器从a-ec2切换到b-ec2,出现了zend acl错误。我们使用isallowed函数来检查用户是否有足够的权限访问某个服务。位于第827行的isallowd函数,/library/zendacl.php第一次返回false。然后,我们重新加载页面,isallowed函数返回true以便我们可以访问服务。详细地说,在第1161行的&\u getrules函数出错了,该函数用于&\u getruletype函数。在这些过程中,不知何故其中一个数组包含“typedeny”。但当尝试重新加载(ctrl+f5)时,该值将变为“type\u allow”。
怎么会这样?如何解决这个问题?
我们正试着在两周或更长的时间内解决这个问题。。。提前谢谢!!
[更新]我们发现在下面编写的这个方法工作不好,因此无法正确获取$auth。
$auth返回“”。
self::$_auth = $auth = Zend_Auth::getInstance()->getStorage()->read();
[更新2]
我们可能会解决这个问题,所以我不谈我们的解决方案。
我们使用
Zend_Auth::getInstance()->getStorage()->read()
从会话获取$auth。
但是第一次,保存在a-ec2上的会话信息在b-ec2上无法读取。所以,我们决定在redis中使用会话信息,所以我们改变了方法以获得$auth-like
require_once 'Zend/Session.php';
Zend_Session::start();
self::$_auth = $auth = Common_Model_Redis::get();
在连接到redis服务器之前启动会话,并从中获取会话信息!我希望这对你也有用!
暂无答案!
目前还没有任何答案,快来回答吧!