好的,因此我得到了一个非常罕见的负载均衡PHP网站的独特场景。令人讨厌的是-它曾经不是负载均衡的。现在我们开始遇到问题了…
当前唯一的问题是PHP会话。自然,起初没有人想到此问题,因此PHP会话配置保留为默认设置。因此,两个服务器都有自己的少量会话文件存储,而麻烦的是将下一个请求引发到另一个服务器的用户,因为该用户没有在第一个服务器上创建的会话。
现在,我一直在阅读有关如何解决这种情况的PHP手册。在那里,我发现的功能很不错session_set_save_handler()。(而且,与此同时,)整洁。除了我必须在网站的所有页面上调用此函数。而且未来页面的开发人员也必须记住始终都在调用它。感觉有点笨拙,更不用说违反了十几种最佳编码实践。如果我可以翻转一些全局配置选项和 Voilà ,那就更好了-所有会话都神奇地存储在DB或内存缓存或其他东西中。
session_set_save_handler()
有关如何执行此操作的任何想法?
补充: 为了澄清-我希望这是标准解决方案的标准情况。仅供参考- 我有一个MySQL数据库。当然,必须有一些可以立即使用的代码来解决这个问题?我当然可以编写自己的会话保存内容,auto_prepend而Greg指出的选择似乎很有希望- 但这就像重新发明轮子一样。:P
auto_prepend
新增2: 负载平衡基于DNS。
补充3: 好,我看到一个解决方案是使用auto_prependoption session_set_save_handler()在每个脚本中插入对的调用并编写我自己的DB持久性,也许抛出调用以memcached提高性能。很公平。
memcached
还有什么办法可以避免自己编写所有代码?像一些著名且经过测试的PHP插件吗?
另外,我只是在所有页面中手动添加了会话处理程序。
您可以将PHP设置为处理数据库中的会话,因此所有服务器共享相同的会话信息,因为所有服务器为此使用相同的数据库。
一个很好的教程可以在这里找到。