Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah rangka kerja golang mengurus sesi dan keadaan pengguna?

Bagaimanakah rangka kerja golang mengurus sesi dan keadaan pengguna?

WBOY
WBOYasal
2024-06-05 20:36:59743semak imbas

Urus sesi pengguna dan nyatakan dalam Go: Pengurusan sesi: Menggunakan jenis Kuki dan Sesi, kuki sesi boleh dibuat dan dikemas kini. Pengurusan negeri: Menggunakan penyegerakan. Jenis peta, data pengguna dan maklumat keadaan boleh disimpan, menggunakan ID sesi sebagai kunci.

Bagaimanakah rangka kerja golang mengurus sesi dan keadaan pengguna?

Urus sesi pengguna dan nyatakan menggunakan rangka kerja Go

Dalam pembangunan web, mengurus sesi dan keadaan pengguna adalah penting untuk menyediakan pengalaman pengguna yang diperibadikan dan selamat. Rangka kerja Go menyediakan satu set ciri yang memudahkan untuk melaksanakan pengurusan sesi dan keadaan.

Pengurusan Sesi

Dengan Go, anda boleh mengurus sesi menggunakan jenis Cookie dan Session daripada pakej 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)
    }
}

这段代码创建了一个新的会话 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)
}

这段代码将指定的值存储在 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)
}

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

Kod ini mencipta kuki sesi baharu atau mengemas kini kuki sesi sedia ada dan menghantarnya kepada pelanggan. 🎜🎜🎜Pengurusan Negeri🎜🎜🎜Untuk menyimpan data pengguna dan maklumat keadaan, Go menyediakan jenis sync.Map. 🎜rrreee🎜Kod ini menyimpan nilai yang ditentukan dalam peta userState, menggunakan ID sesi sebagai kunci. 🎜🎜🎜Kes praktikal🎜🎜🎜Dalam kes berikut, kami menggunakan gorila/sesi dan sync.Map untuk mengurus sesi dan status pengguna: 🎜rreee🎜Contoh ini menggunakan gorila/sesi mengurus sesi dan menggunakan sync.Map untuk mengurus status pengguna. Ia membolehkan pengguna menetapkan dan mendapatkan semula status mereka sendiri. 🎜

Atas ialah kandungan terperinci Bagaimanakah rangka kerja golang mengurus sesi dan keadaan pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn