我们正在使用 Amazon Web Services (AWS),并且我们有多个 Web 服务器和一个负载均衡器。Web 服务器的问题是,$_SESSION 对于每个服务器都是唯一的。我在 $_SESSION 中保留了一些关于用户的信息。
同步此信息的正确方法是什么?有什么方法可以统一保存这些会话的地方,还是我应该使用 MySQL 来存储这些数据(我不太喜欢最后一个选项)?
我们正在使用 Amazon Web Services (AWS),并且我们有多个 Web 服务器和一个负载均衡器。Web 服务器的问题是,$_SESSION 对于每个服务器都是唯一的。我在 $_SESSION 中保留了一些关于用户的信息。
同步此信息的正确方法是什么?有什么方法可以统一保存这些会话的地方,还是我应该使用 MySQL 来存储这些数据(我不太喜欢最后一个选项)?
我认为您正在寻找的是“粘性会话”。如果我是对的,亚马逊为您提供了两种不同的选择。
负载均衡器(基于持续时间,我推荐这个)http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_StickySessions.html#US_EnableStickySessionsLBCookies
以及基于应用程序的会话粘性 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_StickySessions.html#US_EnableStickySessionsAppCookies
虽然在概念上类似于您出于某种原因试图避免使用的 MySQL 选项,但在Amazon Web Services (AWS)中使用的一个非常吸引人的选项是最近引入的使用 Amazon DynamoDB 在 PHP 中进行可扩展会话处理,它解决了 PHP 中的典型会话处理不可扩展,因此无论如何都需要某种自定义解决方案:
会话用于跨多个 HTTP 请求保存短期数据 [...]。PHP 的本机会话处理程序将会话数据存储到本地文件系统;但是,这种方法在分布式 Web 应用程序中变得不可靠。在随后的请求中,用户可能不会被路由到同一台服务器,从而导致数据被有效地遗忘。用户将被注销并感到困惑。
为了克服这个问题,PHP 开发人员实施了自定义解决方案,使用数据库、共享文件系统、Memcache 服务器、防篡改 cookie 和其他存储机制来存储用户的会话数据。[...] [强调我的]
根据您的用例,您可能希望相应地尝试这种可能非常快的会话存储。
要添加到上述答案,您正在寻找像 DynamoDB 这样的分布式缓存,这是一项付费的亚马逊服务。它使用起来非常快速和出色,但如果您正在寻找其他一些开源替代品,您可以查看以下内存读/写选项。