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.
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
包中的 Cookie
和 Session
类型管理会话。
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/sessions
和 sync.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.Map
rrreee
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!