Questo tutorial mostra come gestire le sessioni su App Engine.
Molte app richiedono la gestione delle sessioni per l'autenticazione e le preferenze utente.
Il pacchetto Gorilla Web Toolkit
sessions
è dotato di un'implementazione basata sul file system per eseguire questa funzione. Tuttavia, questa implementazione non è adatta per un'app che può essere pubblicata da più istanze, perché la sessione registrata in un'istanza potrebbe essere diversa da quella registrata in altre istanze. Il
package gorilla/sessions
è dotato anche di un'implementazione basata sui cookie. Tuttavia, questa implementazione richiede la crittografia dei cookie e la memorizzazione dell'intera sessione sul client, anziché solo di un ID sessione, che potrebbe essere troppo grande per alcune app.
Obiettivi
- Scrivi l'app.
- Esegui l'app localmente.
- Esegui il deployment dell'app su App Engine.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Aggiorna i componenti
gcloud
:gcloud components update
- Prepara l'ambiente di sviluppo.
Configurazione del progetto
Nella finestra del terminale, clona il repository dell'app di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Passa alla directory che contiene il codice di esempio:
cd golang-samples/getting-started/sessions
Informazioni sull'app web
Questa app mostra i saluti in lingue diverse per ogni utente. Gli utenti di ritorno vengono sempre accolti nella stessa lingua.
Prima che l'app possa memorizzare le preferenze di un utente, devi avere un modo per memorizzare le informazioni sull'utente corrente in una sessione. Questa app di esempio utilizza Firestore per archiviare i dati della sessione.
Puoi utilizzare firestoregorilla
, un deposito delle sessioni compatibile con gorilla/sessions
.
L'app inizia importando le dipendenze, definendo un tipo
app
per contenere unsessions.Store
e un modello HTML e definendo l'elenco dei saluti.Successivamente, l'app definisce una funzione
main
, che crea una nuova istanzaapp
, registra il gestore dell'indice e avvia il server HTTP. La funzionenewApp
crea l'istanzaapp
inizializzando unsessions.Store
con la funzionefirestoregorilla.New
.L'handler dell'indice recupera la sessione dell'utente, creandone una se necessario. Alle nuove sessioni viene assegnato un linguaggio casuale e un numero di visualizzazioni pari a 0. Poi, il conteggio delle visualizzazioni viene aumentato di 1, la sessione viene salvata e il modello HTML scrive la risposta.
Il seguente diagramma illustra in che modo Firestore gestisce le sessioni per l'app App Engine.
Eliminazione di sessioni
firestoregorilla
non elimina le sessioni vecchie o scadute. Puoi
eliminare i dati delle sessioni
nella console Google Cloud
o implementare una strategia di eliminazione automatica. Se utilizzi soluzioni di archiviazione per le sessioni come Memcache o Redis, le sessioni scadute vengono eliminate automaticamente.
Eseguire l'app in locale
Nella finestra del terminale, compila il file binario
sessions
:go build
Avvia il server HTTP:
./sessions
Visualizza l'app nel browser web:
Cloud Shell
Nella barra degli strumenti di Cloud Shell, fai clic su Anteprima web e seleziona Anteprima sulla porta 8080.
Macchina locale
Nel browser, vai a
http://localhost:8080
Viene visualizzato uno dei cinque saluti: "Hello World", "Hallo Welt", "Hola mundo", "Salut le Monde" o "Ciao Mondo". La lingua cambia se apri la pagina in un altro browser o in modalità di navigazione in incognito. Puoi visualizzare e modificare i dati della sessione nella console Google Cloud.
Per arrestare il server HTTP, premi
Control+C
nella finestra del terminale.
Deployment ed esecuzione su App Engine
Puoi utilizzare l'ambiente standard di App Engine per creare ed eseguire il deployment di un'app che funziona in modo affidabile anche se sottoposta a un carico elevato e con grandi quantità di dati.
Questo tutorial utilizza l'ambiente standard di App Engine per eseguire il deployment del server.
Il file app.yaml
contiene la configurazione dell'ambiente standard di App Engine:
Esegui il deployment dell'app su App Engine:
gcloud app deploy
Nel browser, inserisci il seguente URL:
https://PROJECT_ID.REGION_ID.r.appspot.com
Sostituisci quanto segue:
PROJECT_ID
: l'ID del tuo progetto Google CloudREGION_ID
: un codice assegnato da App Engine alla tua app
Il messaggio di saluto viene ora inviato da un server web in esecuzione su un'istanza App Engine.
Eseguire il debug dell'app
Se non riesci a connetterti all'app App Engine, verifica quanto segue:
- Verifica che i comandi di deployment di
gcloud
siano stati completati correttamente e che non abbiano generato errori. Se si sono verificati errori (ad esempio,message=Build failed
), correggili e riprova a eseguire il deployment dell'app App Engine. Nella console Google Cloud, vai alla pagina Esplora log.
Nell'elenco a discesa Risorse selezionate di recente, fai clic su App Engine Application e poi su Tutti i module_id. Viene visualizzato un elenco di richieste effettuate quando hai visitato la tua app. Se non vedi un elenco di richieste, verifica di aver selezionato Tutti i module_id dall'elenco a discesa. Se nella console Google Cloud vengono visualizzati messaggi di errore, verifica che il codice dell'app corrisponda al codice riportato nella sezione relativa alla scrittura dell'app web.
Assicurati che l'API Firestore sia abilitata.
Esegui la pulizia
Elimina il progetto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimina l'istanza App Engine
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- Per eliminare la versione dell'app, fai clic su Elimina.
Passaggi successivi
- Prova i tutorial sulle funzioni Cloud Run.
- Scopri di più su App Engine.
- Prova Cloud Run, che ti consente di eseguire container stateless in un ambiente completamente gestito o nel tuo cluster Google Kubernetes Engine.