Go操纵Session

547 次浏览次阅读
没有评论

如果你使用的是框架,在框架中很好的支持了 session 的实现。

但如果你没有使用框架,使用的 Go 原生,那么是不支持 Session 的实现的。

在 Go 的标准库中并没有提供对 Sessoin 的实现。可以自己实现创建管理器存到内存、数据库或者文件当中。当然前提你会写或者有时间去写。小编自己去 github 上找了一个别人写好的包,拿来直接用

安装

在自己的项目中,执行以下命令安装 go-session 包

go get github.com/kataras/go-sessions/v3

实现

package main

import (
   "fmt"
   "github.com/kataras/go-sessions/v3"
   "net/http"
   "time"
)

func main()  {

   sess := sessions.New(sessions.Config{
      Cookie:                      "mysessionid",
      Expires:                     time.Hour * 2,
      DisableSubdomainPersistence: false,
   })

   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte(fmt.Sprintf("You should navigate to the /set, /get, /delete, /clear,/destroy instead")))
   })

   // 设置 session
   http.HandleFunc("/set", func(w http.ResponseWriter, r *http.Request) {s := sess.Start(w, r)
      s.Set("name", "admin")

      w.Write([]byte(fmt.Sprintf("All ok session setted to: %s", s.GetString("name"))))
   })

   // 获取 session
   http.HandleFunc("/get", func(w http.ResponseWriter, r *http.Request) {s := sess.Start(w, r)
      name := s.GetString("name")
      w.Write([]byte(fmt.Sprintf("The name on the /set was: %s", name)))
   })

   // 删除 session
   http.HandleFunc("/del", func(w http.ResponseWriter, r *http.Request) {sess.Start(w, r).Delete("name")
   })

   // 清除 session
   http.HandleFunc("/clear", func(w http.ResponseWriter, r *http.Request) {sess.Start(w, r).Clear()})

   // 刷新 session 的过期时间
   http.HandleFunc("/update", func(w http.ResponseWriter, r *http.Request) {sess.ShiftExpiration(w, r) 如果你使用的是框架,在框架中很好的支持了 session 的实现。

但如果你没有使用框架,使用的 Go 原生,那么是不支持 Session 的实现的。

在 Go 的标准库中并没有提供对 Sessoin 的实现。可以自己实现创建管理器存到内存、数据库或者文件当中。当然前提你会写或者有时间去写。小编自己去 github 上找了一个别人写好的包,拿来直接用

安装

在自己的项目中,执行以下命令安装 go-session 包

go get github.com/kataras/go-sessions/v3

实现

package main

import (
   "fmt"
   "github.com/kataras/go-sessions/v3"
   "net/http"
   "time"
)

func main()  {

   sess := sessions.New(sessions.Config{
      Cookie:                      "mysessionid",
      Expires:                     time.Hour * 2,
      DisableSubdomainPersistence: false,
   })

   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte(fmt.Sprintf("You should navigate to the /set, /get, /delete, /clear,/destroy instead")))
   })

   // 设置 session
   http.HandleFunc("/set", func(w http.ResponseWriter, r *http.Request) {s := sess.Start(w, r)
      s.Set("name", "admin")

      w.Write([]byte(fmt.Sprintf("All ok session setted to: %s", s.GetString("name"))))
   })

   // 获取 session
   http.HandleFunc("/get", func(w http.ResponseWriter, r *http.Request) {s := sess.Start(w, r)
      name := s.GetString("name")
      w.Write([]byte(fmt.Sprintf("The name on the /set was: %s", name)))
   })

   // 删除 session
   http.HandleFunc("/del", func(w http.ResponseWriter, r *http.Request) {sess.Start(w, r).Delete("name")
   })

   // 清除 session
   http.HandleFunc("/clear", func(w http.ResponseWriter, r *http.Request) {sess.Start(w, r).Clear()})

   // 刷新 session 的过期时间
   http.HandleFunc("/update", func(w http.ResponseWriter, r *http.Request) {sess.ShiftExpiration(w, r)
   })

   // 销毁 session 和 cookie
   http.HandleFunc("/destroy", func(w http.ResponseWriter, r *http.Request) {sess.Destroy(w, r)
   })

   http.ListenAndServe(":8081", nil)

}
正文完
 0
评论(没有评论)