PHP 会话未在 Amazon EC2 上持续存在

Posted

技术标签:

【中文标题】PHP 会话未在 Amazon EC2 上持续存在【英文标题】:PHP sessions not persisting on Amazon EC2 【发布时间】:2012-06-11 01:26:11 【问题描述】:

我目前正在开发一个在 Amazon EC2 上运行的 Facebook 应用程序。该应用程序正在运行并且大部分开发已完成,但是我们无法让会话持续存在。我们使用 php 会话 save_path 技巧尝试了 PHP 默认会话处理、数据库处理和内存缓存处理。我们尝试过使用 auto_start 等 ini 设置,但无济于事。

奇怪的问题是初始会话写入确实写入,但第一次之后的任何后续写入都不会保存。我们可以看到会话 cookie 持续存在,但数据的实际写入总是在第一次写入后失败。这个奇怪的问题适用于我们使用的任何会话处理程序。

我们的 EC2 设置如下:

开发:1 个 64 位 linux 服务器、1 个 mongodb 服务器、1 个 elasticache 集群 暂存:1 个 64 位 linux 服务器、1 个 mongodb 服务器、1 个 elasticache 集群 产品:2 个 64 位 linux 服务器和 1 个负载平衡器,3 个 mongodb 服务器和副本集,2 个弹性 ache 集群

会话问题在所有环境中都可以重现。由于我已经尝试了我所知道的所有内容以及在谷歌搜索时发现的所有内容,因此我的想法已经不多了。

作为参考,我们使用的是 CakePHP 2.1,但也尝试过 CakePHP 之外的会话。

【问题讨论】:

你能发布你最简单的可重现代码吗?似乎没有其他人遇到同样的问题,所以它很可能是您的代码中的问题。 【参考方案1】:

检查 php.ini 中的session.save_path

也请阅读:http://php.net/manual/en/function.session-save-path.php

此外,您可能希望发布所有会话。* php.ini 的部分。

【讨论】:

所以经过更多调试发现了一些东西。我注意到我的任何 ini 设置都没有被编写,后来我发现 Facebook SDK 会自动启动会话,这导致 CakePHP 会话永远不会被初始化。在移动了一些代码之后,我的 ini 设置现在正在编写中。它似乎到目前为止工作,但一件小事。我将 save_handler 设置为 memcache,我看到正在写入的数据,但是它们被写入 .lock 并且如果我刷新页面就不会持续存在,我每次都会获得一个全新的会话 ID。只发生在内存缓存中。

以上是关于PHP 会话未在 Amazon EC2 上持续存在的主要内容,如果未能解决你的问题,请参考以下文章

在使用 route53 在云端连接后,Amazon Ec2 上的 Ci3 会话数据出现问题。在公共 DNS 上启动时工作

未在 Aws Ec2 实例上为 PHP 7.2 执行 PHP 代码

在 Amazon EC2 实例上安装 php 和 apache

如何在 Amazon EC2 上配置 PHP + Apache?

自动关闭和启动 Amazon EC2 实例

跨 TCP 443 连接的 Amazon ELB 会话粘性?