本教程介绍了如何在 App Engine 上处理会话。
许多应用需要处理身份验证和用户偏好设置的会话。PHP 附带基于内存的实现可实现此功能。但此实现不适用于可以通过多个实例提供的应用,因为各实例之间记录的会话可能不同。
目标
- 编写应用。
- 在本地运行应用。
- 在 App Engine 上部署应用。
费用
在本文档中,您将使用的以下收费组件: Google Cloud
您可使用 价格计算器 根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
- 登录您的 Google Cloud 账号。如果您是新手 Google Cloud, 请创建一个账号来评估我们的产品在 实际场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init - 配置 gcloud CLI 以使用您的
新 Google Cloud 项目:
将# Configure gcloud for your project gcloud config set project PROJECT_ID
PROJECT_ID替换为您在以上步骤创建或选择的项目 ID。 Google Cloud
设置项目
在终端窗口中,从您选择的目录启动,并创建一个名为
sessions的新目录。本教程的所有代码均位于sessions目录内。切换到
sessions目录:cd sessions安装依赖项:
composer require google/cloud-firestore
在本教程结束时,最终文件结构类似于以下内容:
sessions
├── app.yaml
└── composer.json
├── index.php
编写应用
在终端窗口中,使用以下内容创建名为
index.php的文件:
此应用为每位用户显示不同语言的问候语。回访用户始终会收到同一种语言的问候语。
在应用存储用户偏好设置之前,您需要存储会话中当前用户的相关信息。此示例应用使用 Firestore 来存储会话数据。
您可以通过 Firestore session handler 来使用 Firestore 处理 PHP 会话。
下图说明了 Firestore 如何处理 App Engine 应用的会话。
设置 session_set_save_handler 之后,每个请求都有一个 $_SESSION 全局变量供您访问会话。会话数据存储在 Firestore 中。
在本地运行
启动内置 PHP Web 服务器:
php -S localhost:8080在网络浏览器中查看应用:
Cloud Shell
在 Cloud Shell 工具栏中,点击 Web 预览
,然后选择在端口 8080 上预览。本地机器
在浏览器中,转到
http://localhost:8080您会看到五个问候语之一:“Hello World”“Hallo Welt”“Hola mundo”“Salut le Monde”或“Ciao Mondo”。如果您使用其他浏览器或无痕模式打开网页,语言会更改。您可以在Google Cloud 控制台中查看和修改会话数据。

要停止 HTTP 服务器,请在终端窗口中按
Control+C。
在 App Engine 上部署并运行
通过 App Engine 标准环境 ,您可以构建和部署在繁重负载和大量 数据的压力下仍能可靠运行的应用。
本教程使用 App Engine 标准环境来部署服务器。
在您的终端窗口中,创建一个
app.yaml文件并复制以下内容:在 App Engine 上部署应用:
gcloud app deploy如需查看实际应用,请输入以下网址:
https://PROJECT_ID.REGION_ID.r.appspot.com替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。REGION_ID:App Engine 分配给您的应用的代码
现在,问候语由在 App Engine 实例上运行的 Web 服务器提供。
删除会话
PHP 会执行会话垃圾回收 (GC),根据您的 php.ini 配置移除旧会话和过期会话。默认情况下,Firestore 会话处理程序不会清理会话,但您可以在创建会话处理程序时传递 gcLimit 选项,以将该处理程序配置为执行此操作:
系统会使用基于概率的会话 GC 移除会话,您也可以显式调用 session_gc 函数来移除会话。
调试应用
如果您无法连接到 App Engine 应用,请检查以下内容:
- 检查
gcloud部署命令是否已成功完成,并且未输出任何错误。如果存在错误(例如message=Build failed),修复问题,然后再次尝试 部署 App Engine 应用。 在 Google Cloud 控制台中,前往 Logs Explorer 页面。
在最近选择的资源 下拉列表中,点击 App Engine 应用 ,然后点击 所有 module_id 。您将看到访问您的应用时的请求列表,如果您未发现请求列表,请确认您是否已从下拉列表中选择所有 module_id 。 如果您发现控制台出现错误消息,请检查应用代码是否与 “编写 Web 应用”相关部分中的代码匹配。 Google Cloud
确保已启用 Firestore API。
清理
删除项目
- 在 Google Cloud 控制台中,前往 管理资源 页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击 关闭以删除项目。
删除 App Engine 实例
- 在 Google Cloud 控制台中,前往 App Engine 的 版本 页面。
- 选中要删除的非默认应用版本对应的复选框。
- 如需删除应用版本, 请点击 删除。