Ce tutoriel explique comment gérer des sessions sur App Engine.
De nombreuses applications requièrent une fonctionnalité de gestion de session pour l'authentification et le stockage des préférences utilisateur. PHP intègre une mise en œuvre basée sur la mémoire pour assurer cette gestion. Cette mise en œuvre n'est toutefois pas adaptée à une application pouvant être diffusée depuis plusieurs instances. En effet, la session enregistrée dans une instance peut différer des autres instances.
Objectifs
- Écrire l'application
- Exécuter l'application en local
- Déployer l'application sur App Engine
Coûts
Ce tutoriel utilise les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.
Une fois que vous avez terminé ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Consultez la page Effectuer un nettoyage pour en savoir plus.
Avant de commencer
- Connectez-vous à votre compte Google.
Si vous n'en possédez pas déjà un, vous devez en créer un.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.
- Activez l'API Firestore.
- Installez et initialisez le SDK Cloud.
- Configurez l'outil
gcloud
pour qu'il utilise votre nouveau projet Google Cloud :# Configure gcloud for your project gcloud config set project PROJECT_ID
RemplacezPROJECT_ID
par l'identifiant de projet Google Cloud que vous avez créé ou sélectionné précédemment.
Mettre en place le projet
Dans votre fenêtre de terminal, accédez au répertoire de votre choix et créez-y un répertoire nommé
sessions
. L'ensemble du code de ce tutoriel se base sur une exécution dans le répertoiresessions
.Accédez donc à ce répertoire
sessions
:cd sessions
Installez les dépendances :
composer require google/cloud-firestore
À la fin de ce tutoriel, la structure de fichiers finale ressemble à ce qui suit :
sessions
├── app.yaml
└── composer.json
├── index.php
Écrire l'application
Dans votre fenêtre de terminal, créez un fichier nommé
index.php
contenant le code suivant :
L'application affiche des messages d'accueil dans différentes langues pour chaque utilisateur. Les utilisateurs connus reçoivent toujours les messages d'accueil dans la même langue.
Pour que votre application puisse stocker les préférences d'un utilisateur, vous devez mettre en œuvre une méthode permettant de stocker les informations sur l'utilisateur actuel dans une session. Dans cet exemple d'application, les données de session sont stockées à l'aide de Firestore.
Vous pouvez utiliser Firestore session handler
afin d'exploiter Firestore pour les sessions PHP.
Le schéma suivant décrit la façon dont Firestore gère les sessions pour l'application App Engine.
Une fois que vous avez défini session_set_save_handler
, chaque requête est associée à une variable globale $_SESSION
permettant d'accéder à la session. Les données de session sont stockées dans Firestore.
Exécution locale
Démarrez le serveur Web PHP intégré :
php -S localhost:8080
Affichez l'application dans votre navigateur Web :
Cloud Shell
Dans la barre d'outils Cloud Shell, cliquez sur Aperçu sur le Web
et sélectionnez Prévisualiser sur le port 8080.
Machine locale
Dans votre navigateur, accédez à
http://localhost:8080
L'un des cinq messages d'accueil suivants s'affiche : "Hello World", "Hallo Welt", "Hola mundo", "Salut le Monde" ou "Ciao Mondo". La langue change si vous ouvrez la page dans un autre navigateur ou en mode navigation privée. Vous pouvez consulter et modifier les données de session dans Google Cloud Console.
Dans votre fenêtre de terminal, appuyez sur
Control+C
pour arrêter le serveur HTTP.
Déployer et exécuter l'application sur App Engine
Vous pouvez utiliser l'environnement standard App Engine pour créer et déployer une application qui s'exécute de manière fiable, même lorsqu'elle est soumise à une charge importante et doit gérer de grandes quantités de données.
Dans ce tutoriel, le serveur est déployé dans l'environnement standard App Engine.
Dans votre fenêtre de terminal, créez un fichier
app.yaml
et copiez le contenu suivant :Déployez l'application sur App Engine :
gcloud app deploy
Pour afficher l'application en direct, saisissez l'URL suivante :
https://PROJECT_ID.REGION_ID.r.appspot.com
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet Google Cloud.REGION_ID
: code attribué par App Engine à votre application
Le message d'accueil est désormais diffusé par un serveur Web exécuté sur une instance App Engine.
Supprimer des sessions
PHP dispose d'une fonctionnalité de récupération de mémoire de session, qui supprime les anciennes sessions et les sessions expirées conformément à votre fichier de configuration php.ini
. Le gestionnaire de session Firestore ne nettoie pas les sessions par défaut, mais vous pouvez le configurer en transmettant une option gcLimit
lors de la création du gestionnaire de session :
Les sessions sont supprimées par la fonctionnalité de récupération de mémoire de session qui se base sur la probabilité, ou lorsque vous appelez la fonction session_gc
de manière explicite.
Déboguer l'application
Si vous ne parvenez pas à vous connecter à votre application App Engine, vérifiez les éléments suivants :
- Vérifiez que les commandes de déploiement
gcloud
ont bien abouti et n'ont généré aucune erreur. Si des erreurs se sont produites (par exemple,message=Build failed
), corrigez-les, puis essayez de redéployer l'application App Engine. Dans Cloud Console, accédez à la page Visionneuse de journaux.
Accéder à la page "Visionneuse de journaux"
Dans la liste déroulante Ressources sélectionnées récemment, cliquez sur Application App Engine, puis sur Tous les ID de module. La liste des requêtes correspondant à votre accès à l'application s'affiche. Si cette liste n'apparaît pas, vérifiez que vous avez bien sélectionné Tous les ID de module dans la liste déroulante. Si des messages d'erreur s'affichent dans Cloud Console, vérifiez que le code de votre application correspond au code décrit dans la section sur l'écriture de l'application Web.
Assurez-vous que l'API Firestore est activée.
Nettoyer
Supprimer le projet
- Dans Cloud Console, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer l'instance App Engine
- Dans Cloud Console, accédez à la page Versions pour App Engine.
- Cochez la case correspondant à la version de l'application autre que celle par défaut que vous souhaitez supprimer.
- Cliquez sur Supprimer delete pour supprimer la version de l'application.