好的,我有一个非常罕见且独特的负载均衡PHP网站方案。不幸的是-它以前没有进行负载均衡。现在我们开始出现问题...
目前唯一的问题是PHP会话。自然而然,一开始没有人想到这个问题,所以PHP会话配置保持默认设置。因此,两个服务器都有自己的一小堆会话文件,下一个请求被投向另一个服务器的用户就很倒霉了,因为那里没有他在第一个服务器上创建的会话。
现在,我一直在阅读PHP手册,试图解决这种情况。我发现了一个好用的函数session_set_save_handler()
。(巧合的是,在SO上的这个主题中)挺不错的。除了我得在网站的所有页面中调用此函数。未来页面的开发人员也必须记住始终调用它。感觉有点笨拙,更何况可能违反十几项最佳编码实践。如果我能够翻转某些全局配置选项,会话将全部神奇地存储在DB或内存缓存中等,那该多好啊。
有什么想法吗?
添加:为了澄清-我希望这是一个标准的情况并具有标准的解决方案。FYI-我有一个MySQL DB可用。肯定有一些现成的代码可以解决这个问题吧?当然,我可以编写自己的会话保存内容,并且Greg指出的
auto_prepend
选项似乎很有前途-但那感觉像重新发明轮子。:P
添加2:负载均衡是基于DNS的。我不确定它是如何工作的,但我想应该类似于这个。 添加3:好的,我看到一个解决方案是使用
auto_prepend
选项在每个脚本中插入对session_set_save_handler()
的调用,然后编写自己的DB持久化程序,可能还要加上对memcached
的调用以提高性能。很好。
还有没有某种方式可以避免自己编写所有这些代码呢?像一些著名且经过充分测试的PHP插件一样?
后来添加:最终我选择了这种方式:如何在PHP + MySQL中正确实现自定义会话持久化器?
此外,我只需在所有页面中手动包含会话处理程序即可。