1. Sessions

gorilla/sessions为自定义session后端提供cookie和文件系统session以及基础结构。

主要功能是:

  • 简单的API:将其用作设置签名(以及可选的加密)cookie的简便方法。
  • 内置的后端可将session存储在cookie或文件系统中。
  • Flash消息:一直持续读取的session值。
  • 切换session持久性(又称“记住我”)和设置其他属性的便捷方法。
  • 旋转身份验证和加密密钥的机制。
  • 每个请求有多个session,即使使用不同的后端也是如此。
  • 自定义session后端的接口和基础结构:可以使用通用API检索并批量保存来自不同商店的session。

代码:

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "github.com/gorilla/sessions"
  6. )
  7. // 初始化一个cookie存储对象
  8. // something-very-secret应该是一个你自己的密匙,只要不被别人知道就行
  9. var store = sessions.NewCookieStore([]byte("something-very-secret"))
  10. func main() {
  11. http.HandleFunc("/save", SaveSession)
  12. http.HandleFunc("/get", GetSession)
  13. err := http.ListenAndServe(":8080", nil)
  14. if err != nil {
  15. fmt.Println("HTTP server failed,err:", err)
  16. return
  17. }
  18. }
  19. func SaveSession(w http.ResponseWriter, r *http.Request) {
  20. // Get a session. We're ignoring the error resulted from decoding an
  21. // existing session: Get() always returns a session, even if empty.
  22. // 获取一个session对象,session-name是session的名字
  23. session, err := store.Get(r, "session-name")
  24. if err != nil {
  25. http.Error(w, err.Error(), http.StatusInternalServerError)
  26. return
  27. }
  28. // 在session中存储值
  29. session.Values["foo"] = "bar"
  30. session.Values[42] = 43
  31. // 保存更改
  32. session.Save(r, w)
  33. }
  34. func GetSession(w http.ResponseWriter, r *http.Request) {
  35. session, err := store.Get(r, "session-name")
  36. if err != nil {
  37. http.Error(w, err.Error(), http.StatusInternalServerError)
  38. return
  39. }
  40. foo := session.Values["foo"]
  41. fmt.Println(foo)
  42. }

删除session的值:

  1. // 删除
  2. // 将session的最大存储时间设置为小于零的数即为删除
  3. session.Options.MaxAge = -1
  4. session.Save(r, w)

官网地址:http://www.gorillatoolkit.org/pkg/sessions