PHP 将其会话信息存储在建立该会话的服务器主机的文件系统上。在多主机 PHP 环境中,负载不智能地分布在每个主机之间,PHP 会话变量不可用于每个请求(除非偶然将请求分配给同一主机 - 假设我们无法控制负载均衡器) 。

该网站被称为“PHP 负载平衡搭便车指南” 建议重写 PHP 会话处理程序并将会话信息存储在共享数据库中。

以你的愚见,什么是 最好的 如何在多个 PHP 主机环境中维护会话信息?

更新: 感谢您的反馈。对于任何寻找示例代码的人,我们找到了 关于为 MySQL 编写会话管理器类的有用教程 我建议您查看一下。

有帮助吗?

解决方案

数据库,或者数据库+Memcache。一般来说,会话​​不应被频繁写入。从数据库解决方案开始,该解决方案仅在会话数据已写入时才写入数据库 改变了. 。稍后应添加 Memcache 作为性能增强。数据库解决方案将非常快,因为您只需查找主键。确保数据库具有行锁定,而不是表锁定(myISAM)。仅 MemCache 是个坏主意......如果它溢出、崩溃或重新启动,用户将被注销。

其他提示

无论您做什么,都不要将其存储在服务器本身上(即使您只使用一台服务器,或者在 1+1 故障转移场景中)。它会让你陷入死胡同。

我想说,使用 Database+Memcache 进行存储/检索,它会让你脱离 Zend 的控制(相信我,Zend 的某些时候确实会崩溃)。由于您将能够轻松地按 UserID 或 SessionID 进行分区,因此即使使用 MySQL 也会使事情变得非常可扩展。

(编辑:此外,使用 DB+Memcache 不会将您与商业团体联系起来,也不会将您与 PHP 联系起来——您可能会对此感到高兴)

将会话数据存储在共享数据库中是可行的,但可能会很慢。如果这是一个非常大的网站 内存缓存 可能是一个更好的选择。

根据您的项目预算,您还可以考虑在生产机器上使用 Zend Platform,它除了许多其他出色的功能之外,还包括可配置的会话集群,其工作原理有点像 CDN。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top