session的使用

package main

import (
   "fmt"
   "github.com/gorilla/securecookie"
   "github.com/gorilla/sessions"
   "net/http"
   "os"
)

// session密钥,建议长度为32或64
var sessionKey = securecookie.GenerateRandomKey(64)

// session名称(即cookie的name),示例值:PHPSESSID、JSESSIONID
var sessionName = "PHPSESSID"

func GetFilesystemStore() *sessions.FilesystemStore {
   rootPath, _ := os.Getwd()
   storePath := rootPath + "/data/session" // session文件保存目录
   return sessions.NewFilesystemStore(storePath, sessionKey)
}

func main() {
   //========== 设置session『浏览器访问http://IP地址:8081/SetSession』 ==========//
   http.HandleFunc("/SetSession", func(writer http.ResponseWriter, request *http.Request) {
      filesystemStore := GetFilesystemStore()
      session, _ := filesystemStore.Get(request, sessionName)

      session.Values["name"] = "张三"  // 设置名为name的session,其值为张三
      session.Values["age"] = 18     // 设置名为age的session,其值为18
      session.Values["gender"] = "男" // 设置名为gender的session,其值为男

      err := session.Save(request, writer) // 需要调用Save()才能保存设置的session
      if err == nil {
         fmt.Println("设置session成功") // 设置session成功
      } else {
         fmt.Printf("设置session失败,原因:%+v \n", err.Error())
      }
   })

   //========== 获取session『浏览器访问http://IP地址:8081/GetSession』 ==========//
   http.HandleFunc("/GetSession", func(writer http.ResponseWriter, request *http.Request) {
      filesystemStore := GetFilesystemStore()
      session, _ := filesystemStore.Get(request, sessionName)

      name := session.Values["name"]     // 获取名为name的session的值
      age := session.Values["age"]       // 获取名为age的session的值
      gender := session.Values["gender"] // 获取名为gender的session的值

      fmt.Printf("俺叫%v%v),今年%v岁。 \n", name, gender, age) // 俺叫张三(男),今年18岁。
   })

   //========== 删除session『浏览器访问http://IP地址:8081/DelSession』 ==========//
   http.HandleFunc("/DelSession", func(writer http.ResponseWriter, request *http.Request) {
      filesystemStore := GetFilesystemStore()
      session, _ := filesystemStore.Get(request, sessionName)

      if session.Values["name"] != nil {
         session.Options.MaxAge = -1
         err := session.Save(request, writer) // 需要调用Save()才能删除session
         if err == nil {
            fmt.Println("删除session成功") // 删除session成功
         } else {
            fmt.Printf("删除session失败,原因:%+v \n", err.Error())
         }
      } else {
         fmt.Println("session不存在,无需删除")
      }
   })

   _ = http.ListenAndServe(":8081", nil)
}

Copyright © 2023 码农人生. All Rights Reserved