En este instructivo, se muestra cómo manejar sesiones en App Engine.
En muchas aplicaciones, se necesita manejar sesiones para la autenticación y las preferencias del usuario. En PHP, se incluye una implementación basada en la memoria para realizar esta función. Sin embargo, esta implementación no es adecuada para una aplicación que se puede entregar desde varias instancias, ya que la sesión que se registra en una instancia puede diferir de otras.
Objetivos
- Escribe la aplicación.
- Ejecuta la aplicación de manera local.
- Implementa la aplicación en App Engine.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.
Antes de comenzar
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
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.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
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.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init - Configura gcloud CLI para usar tu proyecto Google Cloud nuevo:
Reemplaza# Configure gcloud for your project gcloud config set project PROJECT_ID
PROJECT_IDpor el Google Cloud ID del proyecto que creaste o seleccionaste anteriormente.
Prepara el proyecto
En la ventana de tu terminal, comienza en un directorio de tu elección y crea un directorio nuevo llamado
sessions. Todo el código para este instructivo está dentro del directoriosessions.Cambia al directorio
sessionscon el comando siguiente:cd sessionsInstala las dependencias con el comando siguiente:
composer require google/cloud-firestore
Al término de este instructivo, la estructura final del archivo es similar a la siguiente:
sessions
├── app.yaml
└── composer.json
├── index.php
Escribe la aplicación
En la ventana de tu terminal, crea un archivo llamado
index.phpcon el contenido siguiente:
Esta app muestra saludos en diferentes idiomas para cada usuario. A los usuarios que regresan siempre se los recibe en el mismo idioma.
Antes de que se puedan guardar las preferencias de un usuario en tu aplicación, necesitas una forma de almacenar información sobre el usuario actual en una sesión. En esta app de muestra se usa Firestore para almacenar los datos de las sesiones.
Puedes usar Firestore session handler a fin de usar Firestore para almacenar sesiones de PHP.
En el siguiente diagrama se muestra cómo Firestore controla las sesiones de la aplicación de App Engine.
Después de configurar session_set_save_handler, cada solicitud tiene una variable global $_SESSION que puedes usar para acceder a la sesión. Los datos de la sesión se almacenan en Firestore.
Ejecución local
Inicia el servidor web de PHP integrado con el comando siguiente:
php -S localhost:8080Visualiza la aplicación en el navegador web de la manera siguiente:
Cloud Shell
En la barra de herramientas de Cloud Shell, haz clic en Vista previa en la Web
y selecciona Vista previa en el puerto 8080.Máquina local
En tu navegador, ve a
http://localhost:8080.Ves uno de los cinco saludos: "Hello World", "Hallo Welt", "Hola mundo", "Salut le Monde" o "Ciao Mondo". El idioma cambia si abres la página en otro navegador o en modo Incógnito. Puedes ver y editar los datos de la sesión en la consola deGoogle Cloud .

Para detener el servidor HTTP, presiona
Control+Cen la ventana de la terminal.
Implementa y ejecuta en App Engine
Puedes usar el entorno estándar de App Engine para compilar y, también, implementar una app que se ejecute de forma confiable con cargas pesadas y grandes cantidades de datos.
En este instructivo, se usa el entorno estándar de App Engine para implementar el servidor.
En la ventana de la terminal, crea un archivo
app.yamly copia lo siguiente:Implementa la app en App Engine con el siguiente comando:
gcloud app deployPara ver la app publicada, ingresa la siguiente URL:
https://PROJECT_ID.REGION_ID.r.appspot.comReemplaza lo siguiente:
PROJECT_ID: ID de tu proyecto de Google CloudREGION_ID: Un código que App Engine asigna a la app
El saludo ahora se entrega en un servidor web que se ejecuta en una instancia de App Engine.
Borra sesiones
En PHP, se realiza la recolección de elementos no utilizados (GC) de sesión, la cual quita sesiones antiguas y vencidas en función de tu configuración en php.ini. El controlador de sesiones de Firestore no limpia las sesiones de forma predeterminada, pero, si quieres configurarlo para que lo haga, puedes pasar una opción gcLimit cuando crees el controlador de sesiones:
Las sesiones se quitan mediante la GC de sesión probabilística, o cuando se llama de manera explícita a la función session_gc.
Depura la aplicación
Si no puedes conectarte a la aplicación de App Engine, verifica lo siguiente:
- Comprueba que los comandos de implementación de
gcloudse completaron correctamente y no generaron ningún error. Si hubo errores (por ejemplo,message=Build failed), corrígelos y, luego, intenta implementar la aplicación de App Engine nuevamente. En la consola de Google Cloud , accede a la página Explorador de registros.
Ir a la página Explorador de registros
En la lista desplegable Recursos seleccionados recientemente, haz clic en Aplicación de App Engine y, luego, haz clic en Todos module_id. Verás una lista de las solicitudes de cuando visitaste tu aplicación. Si no ves una lista de solicitudes, confirma que seleccionaste Todos module_id en la lista desplegable. Si ves mensajes de error impresos en la consola de Google Cloud , comprueba que el código de tu app coincida con el código de la sección sobre cómo escribir la app web.
Asegúrate de que la API de Firestore esté habilitada.
Limpia
Borra el proyecto
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra la instancia de App Engine
- En la consola de Google Cloud , ve a la página Versiones de App Engine.
- Selecciona la casilla de verificación de la versión no predeterminada de la app que deseas borrar.
- Para borrar la versión de la app, haz clic en Borrar.