【问题标题】:PHP: $_SESSION variables not persisting on a server behind a proxy/load balancerPHP:$_SESSION 变量未在代理/负载均衡器后面的服务器上持久保存
【发布时间】:2016-07-24 18:19:46
【问题描述】:

我在我的 PHP 应用程序上使用 $_SESSION 变量时遇到了很多麻烦。如果我直接访问运行 PHP 应用程序的 Web 服务器,一切正常。但是在生产中,托管 PHP 应用程序的 Web 服务器实际上位于代理/负载平衡器之后。架构是这样的:

AWS 负载均衡器 -> 由 2 个相同的代理服务器组成 -> 每个代理服务器只是将请求转发到后端服务器 -> 后端服务器实际执行并运行 PHP 应用程序

之所以必须在生产环境中执行此操作,是因为需要在浏览器中包含特定的 URL。

我已经放了

session_start();

header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"');

在所有相关页面上。

这种请求转发是否会导致 $_SESSION 变量不持久?

我不明白,后端服务器无论如何都在做所有事情,$_SESSION 变量应该是持久化后端服务器,而代理服务器只是转发/接收来自后端服务器的请求而不做任何事情??

【问题讨论】:

    标签: php session proxy load-balancing


    【解决方案1】:

    确保将负载平衡器配置为为每个客户端使用持久性后端服务器。默认情况下,每个后端服务器都有自己的会话数据,因此如果用户切换到不同的后端服务器,它将不会拥有在其他服务器上分配的会话变量。

    或者您需要在所有后端服务器之间实现共享会话存储。

    【讨论】:

    • 虽然有2个代理,只有1个后端服务器,所以理论上无论哪个代理服务器收到请求,都转发到同一个后端服务器。这还会影响 $_SESSION 变量吗?
    猜你喜欢
    • 2019-01-13
    • 2014-07-04
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多