用Go语言Gin框架实现Cookie与Session管理

一、Cookie

1、Cookie的使用

 


c.SetCookie("read", "123", 60, "/","localhost", false, true)   // 设置cookie
c.Cookie("read")    // 获取cookie

 

2、模拟登录

第一步:访问home页失败,由于没有访问login页面,没有设置cookie

http://localhost:8000/home

第二步:然后访问login页面设置cookie

http://localhost:8000/login

第三步:访问完login页面。再访问home页面就可以成功了


package main

import (
  "github.com/gin-gonic/gin"
  "net/http"
)

func AuthMiddleWare() gin.HandlerFunc{
  return func(c *gin.Context){
    //获取客户端cookie并校验
    if cookie,err:= c.Cookie("abc");err==nil{
      if cookie == "123" {
          c.Next()
          return
      }
    }
    //返回错误
    c.JSON(http.StatusUnauthorized,gin.H("error":"身份验证失败"))
    //若验证不通过。不再调用后续的函数处理
    c.Abort()
    return
  }
}

func main() {
  // 1.创建路由
  r := gin.Default()
  // 模仿登录成功,设置cookie
  r.GET("/login", func(c *gin.Context) {
    c.SetCookie("read", "123", 60, "/",
      "localhost", false, true)
    c.String(200, "Login success!")
  })
  // 使用局部中间件,验证cookie
  r.GET("/home", AuthMiddleWare(), func(c *gin.Context) {
    c.JSON(200, gin.H{"data": "home"})
  })
  r.Run(":8000")
}

二、Session

1、session使用语法:


// 第一:初始化一个cookie存储对象
// something-very-secret应该是一个你自己的密匙,只要不被别人知道就行
var store = sessions.NewCookieStore([]byte("something-very-secret"))

// 第二步:保存更改
session.Values["foo"] = "bar"
session.Save(r, w)

// 第三步:获取session值
session.Values["foo"]

2、使用演示:


package main
import (
  "fmt"
  "github.com/gorilla/sessions"
  "net/http"
)

// 第一:初始化一个cookie存储对象
// something-very-secret应该是一个你自己的密匙,只要不被别人知道就行
var store = sessions.NewCookieStore([]byte("something-very-secret"))

func main() {
  http.HandleFunc("/save", SaveSession)
  http.HandleFunc("/get", GetSession)
  err := http.ListenAndServe(":8080", nil)
  if err != nil {
    fmt.Println("HTTP server failed,err:", err)
    return
  }
}

func SaveSession(w http.ResponseWriter, r *http.Request) {
  // 获取一个session对象,session-name是session的名字
  session, err := store.Get(r, "session-name")
  if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
  }
  // 在session中存储值
  session.Values["foo"] = "bar"
  session.Values[520] = 521
  // 第二步:保存更改
  session.Save(r, w)
}

func GetSession(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值
  foo := session.Values["foo"]
  fmt.Println(foo)
}

 

 

 

版权声明:
作者:漏网的鱼
链接:http://www.csev.cn/code-2/golang/20240526336.html
来源:彩色动力-测试分享
版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。
THE END
根据我国《计算机软件保护条例》第十七条规定:“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录
微信扫一扫关注蓝威网官方公众号

微信扫一扫关注蓝威网官方公众号