谷歌应用程序引擎-PHP会话数据未跨子域/服务保留



我在一个项目中使用谷歌应用引擎和多个服务。每个服务都有自己的子域(subdomain.domain.com(。我的目标是在多个子域中保留会话数据。我在本地主机开发环境(Apache(中使用了这个,它可以跨子域工作,但不能在GAE上工作。以下是我如何初始化会话(PHP7.2(:

session_id('MySessionId');
session_name("MySessionName");
session_set_cookie_params(0, '/', '.domain.com');
session_start();

在每一页上,作为第一段代码,我都使用这段代码来继续一个会话。

session_name("MySessionName");
session_start();

当我在谷歌浏览器上查看会话cookie时,每个服务都会正确设置。会话名称、id/value和域在各个服务中都匹配。然而,每个服务只保存它创建的数据。会话数据不在子域/服务之间共享。据我所知,GAE存储会话数据的方式是在memcache中,并且该数据可用于项目下的所有服务。我忽略了什么是谷歌应用引擎特有的?

[我从最初的帖子开始尝试的内容]今天我想看看我的编程中是否有其他原因导致了这个问题,所以我把它简化为只是开始一个会话。这两个子域/服务在index.php文件中都只有以下内容。

session_name("MySessionName");
session_id('123456789');
session_set_cookie_params(0, '/', '.mydomain.com');
session_start();
$date = new DateTime('now');
// in the first subdomain/service
$_SESSION['subdomain1'] = $date->format('Y-m-d H:i:s');
// in the second subdomain/service
$_SESSION['subdomain2'] = $date->format('Y-m-d H:i:s');
print '<pre><hr>';
echo session_id() . '<br>';
print_r ($_SESSION);
print '<hr></pre>';

即使会话cookie在两个子域中匹配,会话变量也不同,并且只保存自己的会话信息。

GCP/GAE似乎对不同的实例有不同的会话存储(没有很好的文档记录。我没有参考资料。它是基于不同的读数和反复尝试不同的事情(。我根据这里的发现将会话转换为使用数据库http://phpsecurity.org/code/ch08-2.这比我想象的要容易得多。一切又好了。

最新更新