go 语言使用session
时间: 2023-08-04 17:04:41 浏览: 48
在 Go 语言中,可以使用第三方库实现 session 功能。常用的 session 库有:
- [gorilla/sessions](https://github.com/gorilla/sessions)
- [gin-contrib/sessions](https://github.com/gin-contrib/sessions)
- [go-session/session](https://github.com/go-session/session)
其中,`gorilla/sessions` 库是比较常用的库之一,它提供了简单易用的 session 功能。
使用 `gorilla/sessions` 库,需要先安装该库:
```
go get github.com/gorilla/sessions
```
然后,在代码中引入该库:
```go
import (
"github.com/gorilla/sessions"
"net/http"
)
```
接着,可以创建一个 session 存储对象:
```go
store := sessions.NewCookieStore([]byte("secret-key"))
```
在上述代码中,`NewCookieStore()` 函数创建了一个基于 cookie 的 session 存储对象,第一个参数是用于加密 session 的密钥,第二个参数是用于加密 cookie 的密钥。
然后,可以使用 `store.Get()` 方法获取一个 session 对象:
```go
session, err := store.Get(request, "session-name")
```
在上述代码中,`store.Get()` 方法根据请求对象和 session 名称获取一个 session 对象。如果该 session 不存在,会自动创建一个新的 session 对象。
接着,可以使用 session 对象的 `Set()` 和 `Get()` 方法设置和获取 session 数据:
```go
session.Values["key"] = "value"
value := session.Values["key"]
```
在上述代码中,我们使用 `session.Values` 属性来设置和获取 session 数据。
最后,需要调用 session 对象的 `Save()` 方法将 session 数据保存到存储介质中:
```go
session.Save(request, response)
```
在上述代码中,`session.Save()` 方法将 session 数据保存到响应对象中,客户端会在下次请求时发送该 session 数据给服务端。
完整示例代码如下:
```go
package main
import (
"github.com/gorilla/sessions"
"net/http"
)
func main() {
store := sessions.NewCookieStore([]byte("secret-key"))
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "session-name")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
session.Values["key"] = "value"
value := session.Values["key"]
if value == nil {
http.Error(w, "No value found in session", http.StatusInternalServerError)
return
}
session.Save(r, w)
w.Write([]byte("Session value: " + value.(string)))
})
http.ListenAndServe(":8080", nil)
}
```
在上述示例代码中,我们创建了一个基于 cookie 的 session 存储对象,然后在请求处理函数中获取 session 对象,设置和获取 session 数据,最后将 session 数据保存到响应对象中。