[英]What is the best way to handle sessions for a PHP site on multiple hosts? [closed]
PHP将其会话信息存储在建立该会话的服务器主机的文件系统上。 在多主机PHP环境中,负载在每个主机之间智能分配,PHP会话变量不适用于每个请求(除非偶然将请求分配给同一主机-假设我们无法控制负载均衡器) 。
这个被称为“ PHP负载平衡旅行者指南”的网站建议重写PHP会话处理程序并将会话信息存储在共享数据库中。
在您看来,在多PHP主机环境中维护会话信息的最佳方法是什么?
更新:感谢您的宝贵反馈。 对于寻找示例代码的任何人,我们都找到了一个有用的教程,关于为MySQL编写会话管理器类 ,我建议您检出该类 。
数据库或数据库+缓存。 一般而言,会议不应该经常写。 从数据库解决方案开始,该解决方案仅在会话数据已更改时才写入db。 以后应添加Memcache,以提高性能。 数据库解决方案将非常快,因为您只需要查找主键。 确保数据库具有行锁定,而不具有表锁定(myISAM)。 MemCache仅是一个坏主意...如果它溢出,崩溃或重新启动,则用户将被注销。
无论您做什么,都不要将其存储在服务器本身上(即使您仅使用一台服务器,或处于1 + 1故障转移方案中)。 这会让你死胡同。
我想说,使用Database + Memcache进行存储/检索,这会让您脱离Zend的掌握(并且相信Zend在某些时候确实会导致故障)。 由于即使使用MySQL,您也可以通过UserID或SessionID轻松进行分区,因此可以扩展。
(编辑:此外,使用DB + Memcache不会将您绑定到商业聚会,也不会将您绑定到PHP -您可能对此感到高兴)
将会话数据存储在共享数据库中是可行的,但可能会很慢。 如果这是一个非常大的站点,则内存缓存可能是一个更好的选择。
根据项目的预算,您还可以考虑将Zend Platform用于生产机器,它除了具有许多其他出色功能之外,还包括可配置的会话群集,其工作方式类似于CDN。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.