Golang中如何获取保存到Cookies的Session-ID?
Golang中如何获取保存到Cookies的Session-ID? 我正在使用gorilla/session,需要获取即将保存到cookie中的会话生成令牌(ID),因为我想将该令牌也保存到数据库中。如果我打印HTTP响应即fmt.Println(w),我能够看到如下所示的会话ID:
&{0xc420204000 0xc42012e300 0xc420162840 0x118a4b0 false false false false 0xc420162280 {0xc4201a6460 map[] false false} map[Set-Cookie:[session=MTUyNzQ5MzA3M3xEdi1CQkFFQ180SUFBUkFCRUFBQUpmLUNBQUVHYzNSeWFXNW5EQW9BQ0hWelpYSnVZVzFsQm5OMGNtbHVad3dGQUFOaGMyUT18l1yx3yhYtbpiBRIagYseK80RSRC6warI07QxvmbuaDA=; Path=/; Expires=Wed, 27 Jun 2018 07:37:53 GMT; Max-Age=2592000]] true 0 -1 0 false false [] 0 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0] [0 0 0] 0xc4202140e0 0}
如何将此会话ID存储到变量中,以便后续使用。
func MyHandler(w http.ResponseWriter, r *http.Request) {
// Get a session. We're ignoring the error resulted from decoding an
// existing session: Get() always returns a session, even if empty.
session, _ := store.Get(r, "session-name")
// Set some session values.
session.Values["foo"] = "bar"
session.Values[42] = 43
// Save it before we write to the response/return from the handler.
session.Save(r, w)
}
更多关于Golang中如何获取保存到Cookies的Session-ID?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
文档向我们展示了 sessions.Session 是:
type Session struct {
// 会话ID,由存储生成。不应用于存储用户数据。
ID string
// Values 包含会话的用户数据。
Values map[interface{}]interface{}
Options *Options
IsNew bool
// 包含已过滤或未导出的字段
}
session.ID 可获取会话ID。
更多关于Golang中如何获取保存到Cookies的Session-ID?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中使用gorilla/session时,可以通过session.ID直接获取会话ID。这个ID在调用Save方法后可用,因为会话ID是在保存过程中生成的。
以下是修改后的代码示例:
func MyHandler(w http.ResponseWriter, r *http.Request) {
// 获取会话
session, _ := store.Get(r, "session-name")
// 设置会话值
session.Values["foo"] = "bar"
session.Values[42] = 43
// 保存会话
err := session.Save(r, w)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// 获取会话ID
sessionID := session.ID
fmt.Printf("Session ID: %s\n", sessionID)
// 将sessionID保存到数据库
// 例如:db.SaveSession(sessionID, session.Values)
}
如果你需要在保存之前就获取会话ID,可以使用以下方法:
func MyHandler(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, "session-name")
session.Values["foo"] = "bar"
session.Values[42] = 43
// 强制生成新的会话ID(如果需要)
if session.IsNew {
// 生成新的会话ID
}
// 保存前获取ID(如果已存在)
if session.ID != "" {
fmt.Printf("Existing Session ID: %s\n", session.ID)
}
err := session.Save(r, w)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// 保存后获取最终的会话ID
finalSessionID := session.ID
fmt.Printf("Final Session ID: %s\n", finalSessionID)
// 保存到数据库
// db.SaveSession(finalSessionID, session.Values)
}
注意:会话ID在调用Save方法后才是最终确定的,特别是对于新创建的会话。对于已存在的会话,ID在调用Get方法后就可用了。

