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

时间:2020-03-05 18:57:07  来源:igfitidea点击:

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

这个被称为" PHP负载平衡旅行者指南"的网站建议重写PHP会话处理程序并将会话信息存储在共享数据库中。

在我们看来,在多PHP主机环境中维护会话信息的最佳方法是什么?

更新:感谢宝贵反馈。对于寻找示例代码的人,我们发现了一个有用的教程,关于为MySQL编写会话管理器类,我建议我们检出该类。

解决方案

回答

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

回答

数据库或者数据库+缓存。一般而言,会议不应经常写。从数据库解决方案开始,该解决方案仅在会话数据已更改时才写入数据库。以后应添加Memcache,以提高性能。数据库解决方案将非常快,因为我们只需要查找主键。确保数据库具有行锁定,而不具有表锁定(myISAM)。 MemCache仅是一个坏主意...如果它溢出,崩溃或者重新启动,则用户将被注销。

回答

根据项目的预算,我们还可以考虑将Zend Platform用于生产机器,它除了具有许多其他出色功能之外,还包括可配置的会话群集,其工作方式类似于CDN。

回答

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

我会说,使用Database + Memcache进行存储/检索,将使我们摆脱Zend的控制(并且相信Zend在某些​​时候确实会导致故障)。由于即使使用MySQL,我们也可以通过UserID或者SessionID轻松进行分区,因此可以扩展。

(编辑:此外,使用DB + Memcache不会将我们绑定到商业聚会,也不会将我们绑定到PHP -我们可能对此感到满意)