简介
PHP session支持在服务端缓存用户信息以便随后使用。当在BAE部署环境的实例数大于1时,我们无法通过内存实现分布式session,这是因为环境的多个实例并不共享内存。本文主要基于PHP讨论在BAE专业版上实现分布式session的一种方案。
创建简单缓存服务
百度开放云提供简单缓存服务SCS,支持memcache和redis,因此我们可以利用SCS实现分布式session。BAE专业版的环境实例可以通过内网访问SCS。这里我们以memcache为例,当然也可以使用redis。
注意,需要SCS和BAE部署在百度开放云的同一个区域。我们在“华北-北京“区域创建一个memcache。创建成功后,可以在创建的scs集群详情页获取访问地址和端口号,如下图所示。
通过简单缓存服务实现分布式session
创建一个PHP5.4的应用,并部署一个环境,在”环境详情->设置->关联SCS”中,将该环境和创建的memcache建立关联,BAE会在后台将该环境下所有实例的ip加到该memcache的白名单中。关联的具体操作方法可以参考BAE官方文档环境管理中关联RDS或SCS一节。
我们可以通过修改php.ini配置memcache保存session。php.ini的修改方法请参考BAE官方文档php高级配置中的自定义php.ini。在应用根目录下增加一个php.ini文件,将mamcache的配置写入到该文件。
session.save_handler = memcache
session.save_path = "tcp://memcache.utmppnqy.scs.bj.baidubce.com:11211"
验证配置结果
我们通过修改index.php文件测试,验证分布式session是否生效,代码示例如下:
session_start();
// 缓存session开始的时间
if (!isset($_SESSION['test'])) {
$_SESSION['test'] = time();
}
print session_id();
print "
";
print $_SESSION['test'];
print "
";
print time();
?>
部署代码成功后,通过浏览器刷新访问页面,我们发现打印的session开始时间在同一个session id下面保持不变,即分布式session生效。