好的,所以我得到了这个完全罕见的负载平衡 PHP 网站的独特场景。令人遗憾的是 - 它以前不是负载平衡的。现在我们开始遇到问题了...
目前唯一的问题是 PHP 会话。自然一开始没有人想到这个问题,所以 PHP 会话配置保持默认。因此,两台服务器都有自己的少量会话文件存储,而将下一个请求抛出到另一台服务器的用户是不幸的,因为那没有他在第一个服务器上创建的会话。
现在,我一直在阅读有关如何解决这种情况的 PHP 手册。在那里我发现了session_set_save_handler()
. (而且,巧合的是,这个话题关于 SO) 整洁。除了我必须在网站的所有页面中调用这个函数。未来页面的开发人员也必须记住一直调用它。感觉有点笨拙,更不用说可能违反了十几个最佳编码实践。如果我可以翻转一些全局配置选项会更好,然后瞧——会话都神奇地存储在数据库或内存缓存或其他东西中。
关于如何做到这一点的任何想法?
补充:澄清 - 我希望这是标准解决方案的标准情况。仅供参考 - 我有一个可用的 MySQL 数据库。肯定有一些现成的代码可以解决这个问题吗?当然,我可以编写自己的会话保存内容,Greg
auto_prepend
指出的选项似乎很有希望——但这感觉就像重新发明轮子一样。:P
补充2:负载均衡是基于DNS的。我不确定这是如何工作的,但我想它应该是这样的。
补充 3:好的,我看到一种解决方案是使用
auto_prepend
选项在每个脚本中插入调用session_set_save_handler()
并编写我自己的数据库持久化器,也许会调用调用以memcached
获得更好的性能。很公平。
还有一些方法可以避免我自己编写所有这些代码吗?就像一些著名且经过良好测试的 PHP 插件一样?
很久很久以后添加:这就是我最终采用的方式:如何在 PHP + MySQL 中正确实现自定义会话持久性?
此外,我只是在所有页面中手动包含会话处理程序。