处理多个主机上的 PHP 站点的会话的最佳方法是什么?[已关闭]

2022-08-30 19:17:50

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

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

以您的拙见,在多 PHP 主机环境中维护会话信息的最佳方式是什么?

更新:感谢您的好评。对于任何寻找示例代码的人来说,我们找到了一个关于为MySQL编写会话管理器类的有用教程,我建议你去看看。


答案 1

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


答案 2

无论做什么,都不要将其存储在服务器本身上(即使仅使用一台服务器,或者在 1+1 故障转移方案中)。它会把你放在一条死胡同里。

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

(编辑:此外,使用DB + Memcache不会将您绑定到商业派对,也不会将您绑定到PHP - 您可能会为此感到高兴)


推荐