php-Yii会话的负载平衡
作者:互联网
我正在尝试使用Yii 1.1.14应用程序配置负载平衡的环境,但是我似乎遇到了这样的问题:当负载平衡器使用另一个节点时,Yii无法使用户保持登录状态.在大多数情况下,登录时,它会要求用户登录两次,因为它仅在一个节点上登录,然后在另一节点上加载页面.否则,它将要求用户在浏览中途再次登录.
该应用程序正在使用数据库会话,并且可以看到数据库中的过期时间正在更新.即使在要求他们登录后立即再次登录的情况下,会话过期时间也会在数据库中更新. Yii对会话进行服务器依赖吗?
我已经搜索了几个小时,但是在这个主题上找不到很多东西,想知道是否还有其他人遇到过这样的问题.
在服务器端,我将Nginx与PHP-FPM和Amazon的ELB用作负载平衡器.解决方法(作为最后的解决方法)是在负载平衡器上使用粘性会话,但是如果节点要脱机并强制用户使用备用节点,则这样做不能达到最佳效果.
如果需要进一步说明,请告诉我.
解决方法:
问题是,用于生成应用程序ID的基本路径(在会话中以身份验证信息为前缀)在每个服务器上都不匹配. Amazon OpsWorks使用相同的符号链接路径将代码部署到服务器,但是由于版本控制和符号链接,PHP返回的实际路径有所不同.
例如,两台服务器上的符号链接路径均为“ / app / current”.但是,一台服务器上的实际路径是“ / app / releases / 2014010700”,另一台服务器是“ / app / releases / 2014010701”,这会生成不同的哈希,因此无法使用该会话.
将基本路径更改为在我的配置文件中使用符号链接路径可以解决此问题,而在使用dirname()之前,该操作返回了符号链接内容的真实路径.我还必须在Yii框架的setBasePath中删除realpath()函数.
我对Yii框架所做的修改是针对我的问题的,但是对于遇到多个节点类似问题的其他人,我会仔细检查以确保每个节点都包含与应用程序完全相同的路径.
标签:yii,load-balancing,session,php,database 来源: https://codeday.me/bug/20191122/2058536.html