【BAE专业版】如何让你的PHP服务支持分布式session

  • 简介

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是否生效,代码示例如下:

<?php
    session_start();
    // 缓存session开始的时间
    if (!isset($_SESSION['test'])) {
        $_SESSION['test'] = time();
    }

    print session_id();
    print "<br><br>";
    print $_SESSION['test'];
    print "<br><br>";
    print time();
?>

部署代码成功后,通过浏览器刷新访问页面,我们发现打印的session开始时间在同一个session id下面保持不变,即分布式session生效。

此条目发表在 未分类 分类目录。将固定链接加入收藏夹。

发表评论