Maison > développement back-end > Golang > le corps du texte

Comment le framework Golang gère-t-il les sessions et les états des utilisateurs ?

WBOY
Libérer: 2024-06-05 20:36:59
original
704 Les gens l'ont consulté

Gérer les sessions et l'état des utilisateurs dans Go : Gestion des sessions : à l'aide des types Cookie et Session, des cookies de session peuvent être créés et mis à jour. Gestion de l'état : à l'aide du type sync.Map, les données utilisateur et les informations d'état peuvent être stockées, en utilisant les ID de session comme clés.

Comment le framework Golang gère-t-il les sessions et les états des utilisateurs ?

Gérer les sessions et l'état des utilisateurs à l'aide du framework Go

Dans le développement Web, la gestion des sessions et de l'état des utilisateurs est cruciale pour offrir une expérience utilisateur personnalisée et sécurisée. Le framework Go fournit un ensemble de fonctionnalités qui facilitent la mise en œuvre de la gestion des sessions et des états.

Gestion des sessions

Avec Go, vous pouvez gérer les sessions en utilisant les types Cookie et Session du package net/http. net/http 包中的 CookieSession 类型管理会话。

import (
    "net/http"
)

func SetSession(w http.ResponseWriter, r *http.Request) {
    session, _ := r.Cookie("session")
    if session == nil {
        session = &http.Cookie{
            Name:  "session",
            Value: uuid.New().String(),
        }
        http.SetCookie(w, session)
    }
}
Copier après la connexion

这段代码创建了一个新的会话 cookie 或更新现有的会话 cookie,并将其发送给客户端。

状态管理

对于保存用户数据和状态信息,Go 提供了 sync.Map 类型。

import (
    "sync"
)

var userState = &sync.Map{}

func SetUserState(w http.ResponseWriter, r *http.Request, key, value string) {
    session, _ := r.Cookie("session")
    userState.Store(session.Value, value)
}
Copier après la connexion

这段代码将指定的值存储在 userState 映射中,使用会话 ID 作为键。

实战案例

在以下案例中,我们使用 gorilla/sessionssync.Map 管理会话和用户状态:

import (
    "github.com/gorilla/sessions"
    "sync"
)

var store = sessions.NewCookieStore([]byte("secret-key"))
var userState = &sync.Map{}

func main() {
    http.HandleFunc("/", indexHandler)
    http.HandleFunc("/set-state", setStateHandler)
    http.ListenAndServe(":8080", nil)
}

func indexHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session")
    state, _ := userState.Load(session.Values["id"])
    if state != nil {
        fmt.Fprintf(w, "Your state is: %s", state)
    } else {
        fmt.Fprintf(w, "No state found")
    }
}

func setStateHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session")
    userState.Store(session.Values["id"], r.FormValue("state"))
    http.Redirect(w, r, "/", http.StatusFound)
}
Copier après la connexion

这个示例使用 gorilla/sessions 管理会话,使用 sync.Maprrreee

Ce code crée un nouveau cookie de session ou met à jour un cookie de session existant et l'envoie au client. 🎜🎜🎜Gestion de l'état🎜🎜🎜Pour enregistrer les données utilisateur et les informations d'état, Go fournit le type sync.Map. 🎜rrreee🎜Ce code stocke la valeur spécifiée dans la carte userState, en utilisant l'ID de session comme clé. 🎜🎜🎜Cas pratique🎜🎜🎜Dans le cas suivant, nous utilisons gorilla/sessions et sync.Map pour gérer les sessions et le statut des utilisateurs : 🎜rrreee🎜Cet exemple utilise gorilla/sessions gère les sessions et utilise sync.Map pour gérer le statut des utilisateurs. Il permet aux utilisateurs de définir et de récupérer leur propre statut. 🎜

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!