Maison >développement back-end >Golang >Gestion de session et son application dans le framework Gin
Le framework Gin est un framework Web léger développé en utilisant le langage Go et présente les avantages d'efficacité, de facilité d'utilisation, de flexibilité et d'autres avantages. Dans le développement d'applications Web, la gestion de session est un sujet très important. Elle peut être utilisée pour enregistrer les informations utilisateur, vérifier l'identité de l'utilisateur, prévenir les attaques CSRF, etc. Cet article présentera le mécanisme de gestion de session et son application dans le framework Gin.
1. Mécanisme de gestion de session
Dans le framework Gin, la gestion de session est implémentée via un middleware. Le framework Gin fournit un package de session, qui encapsule les opérations requises pour la gestion de session. Avant d'utiliser le package de session, vous devez d'abord l'installer. Entrez la commande suivante dans le terminal :
go get github.com/gin-contrib/sessions
Le package de session fournit quatre méthodes de gestion de session : Cookie, stockage en mémoire, stockage de fichiers et stockage Redis. Parmi eux, le stockage en mémoire et le stockage de fichiers sont les valeurs par défaut, et le stockage Redis nécessite que le package redis-go-driver soit installé et importé dans le code. Ce qui suit utilise la méthode Cookie comme exemple pour présenter la mise en œuvre de la gestion de session.
package main import ( "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() // 设置会话中间件 store := cookie.NewStore([]byte("secret")) router.Use(sessions.Sessions("mysession", store)) router.GET("/set", setHandler) router.GET("/get", getHandler) router.Run(":8080") } func setHandler(c *gin.Context) { session := sessions.Default(c) session.Set("user", "John") session.Save() c.String(200, "Session saved.") } func getHandler(c *gin.Context) { session := sessions.Default(c) user := session.Get("user") c.String(200, "User is %v.", user) }
Dans le code ci-dessus, nous créons un middleware de session dans le stockage des cookies et le lions au moteur Gin. Parmi eux, le premier paramètre "mysession" représente le nom de la session, et le deuxième paramètre []byte ("secret") est une clé utilisée pour crypter la valeur dans le cookie. Dans setHandler, nous utilisons la méthode session.Set() pour définir une paire clé-valeur, puis appelons la méthode session.Save() pour enregistrer la session. Dans getHandler, nous utilisons la méthode session.Get() pour obtenir des informations sur l'utilisateur et les afficher dans la réponse.
Entrez la commande suivante dans le terminal pour démarrer le service :
go run main.go
Entrez l'adresse suivante dans le navigateur :
http://localhost:8080/set
Puis entrez :
http://localhost:8080/get
Vous pouvez voir que les informations de réponse sont :
User is John.
Cette description Nous avons créé avec succès une session et enregistré les informations utilisateur.
2. Application de la gestion de session
Dans les applications Web, la gestion de session est généralement utilisée dans les scénarios suivants :
L'authentification de l'utilisateur est l'un des scénarios les plus courants dans les applications Web. si l'utilisateur se connecte et si l'utilisateur a accès à certaines ressources. Dans le framework Gin, nous pouvons stocker les informations utilisateur en session et les vérifier partout où une authentification est requise. Voici un exemple simple d'authentification d'utilisateur :
func authHandler(c *gin.Context) { session := sessions.Default(c) user := session.Get("user") if user == nil { c.Redirect(http.StatusFound, "/login") return } // 验证用户身份 if user != "admin" { c.AbortWithStatus(http.StatusUnauthorized) return } c.String(200, "Hello, admin.") }
Dans le code ci-dessus, nous utilisons d'abord la méthode session.Get() pour obtenir des informations sur l'utilisateur, et si l'utilisateur n'est pas connecté, nous redirigeons vers la page de connexion. Si l'utilisateur est connecté, vérifiez qu'il est administrateur. S'il s'agit d'un administrateur, "Bonjour, admin." est affiché, sinon 401 Non autorisé est renvoyé.
Cross-Site Request Forgery (CSRF) est une méthode d'attaque Web courante. Elle utilise le mécanisme Cookie du navigateur pour forger des requêtes afin d'atteindre l'objectif de l'attaque. Dans le framework Gin, nous pouvons utiliser des sessions pour empêcher les attaques CSRF. Plus précisément, à chaque soumission de formulaire, nous ajoutons un champ csrf_token au formulaire, puis stockons le champ dans la session. A chaque requête ultérieure, nous pouvons vérifier si le token est cohérent avec ce qui est stocké dans la session. Voici un exemple simple de défense CSRF :
func csrfHandler(c *gin.Context) { session := sessions.Default(c) token := session.Get("csrf_token") if token == nil || token != c.PostForm("csrf_token") { c.AbortWithStatus(http.StatusBadRequest) return } // 处理表单提交 c.String(200, "Form submitted.") } func formHandler(c *gin.Context) { session := sessions.Default(c) token := uuid.New().String() session.Set("csrf_token", token) session.Save() c.HTML(http.StatusOK, "form.html", gin.H{ "csrf_token": token, }) }
Dans le code ci-dessus, nous comparons d'abord la valeur csrf_token dans le formulaire avec la valeur du jeton stockée dans la session. S’ils sont incohérents, un code d’état 400 Bad Request est renvoyé. S'ils sont cohérents, la soumission du formulaire est traitée et « Formulaire soumis » est affiché. Lorsque le formulaire est chargé, nous utilisons le package uuid pour générer une valeur de jeton unique, puis stockons la valeur dans la session et enfin renvoyons la page du formulaire à l'utilisateur.
3. Résumé
Dans cet article, nous avons présenté le mécanisme de gestion de session et son application dans le framework Gin. La gestion des sessions est un sujet important dans le développement d'applications Web. Elle peut être utilisée pour enregistrer les informations des utilisateurs, vérifier l'identité des utilisateurs, prévenir les attaques CSRF, etc. Dans le framework Gin, nous pouvons utiliser un middleware pour implémenter la gestion de session, et le package de session nous fournit une interface d'exploitation pratique. Dans les applications pratiques, nous pouvons également combiner d'autres modules fonctionnels, tels que l'authentification, l'autorisation, le cryptage, la journalisation, etc., pour créer un système d'application Web plus complet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!