gpt4 book ai didi

php - 使用 Yii session 进行负载均衡

转载 作者:搜寻专家 更新时间:2023-10-31 20:41:17 25 4
gpt4 key购买 nike

我正在尝试使用 Yii 1.1.14 应用程序配置负载均衡环境,但我似乎遇到了一个问题,即当负载均衡器使用另一个节点时,Yii 不会让用户保持登录状态。大多数时候,在登录时,它会要求用户登录两次,因为它只在一个节点上登录,然后在另一个节点上加载页面。否则,浏览到一半会要求用户重新登录。

应用程序正在使用数据库 session ,我可以看到数据库中正在更新过期时间。即使在他们已经登录后要求他们再次登录的情况下, session 过期时间也会在数据库中更新。 Yii 会做任何与 session 相关的服务器吗?

我已经搜索了几个小时,但找不到太多关于这个主题的信息,想知道是否还有其他人遇到过这样的问题。

在服务器端,我将 Nginx 与 PHP-FPM 和亚马逊的 ELB 一起用作负载均衡器。解决方法(作为最后的手段)是在负载均衡器上使用粘性 session ,但如果节点要脱机并强制用户使用替代节点,这就不是最好的方法。

如果我需要更好地澄清任何事情,请告诉我。

最佳答案

问题在于,用于生成应用程序 ID 的基本路径(在 session 中作为身份验证信息的前缀)在每台服务器上都不匹配。 Amazon OpsWorks 使用相同的符号链接(symbolic link)路径将代码部署到服务器,但 PHP 返回的真实路径因版本控制和符号链接(symbolic link)而不同。

例如,两台服务器上的符号链接(symbolic link)路径都是“/app/current”。但是,一台服务器上的实际路径是“/app/releases/2014010700”,另一台是“/app/releases/2014010701”,它们生成不同的哈希值,因此无法处理 session 。

在我的配置文件中更改基本路径以使用符号链接(symbolic link)路径解决了这个问题,而在它使用 dirname() 之前它返回了符号链接(symbolic link)内容的真实路径。我还必须删除 Yii 框架中 setBasePath 中的 realpath() 函数。

我对 Yii 框架所做的修改非常针对我的问题,但对于其他遇到类似多节点问题的人,我会仔细检查以确保每个节点都包含完全相同路径中的应用程序。

感谢您阅读以下文章:http://www.yiiframework.com/forum/index.php/topic/19574-multi-server-authentication-failure-with-db-sessions

关于php - 使用 Yii session 进行负载均衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com