用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
来源:彩色动力-测试分享
版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。
作者:漏网的鱼
链接:http://www.csev.cn/code-2/golang/20240526336.html
来源:彩色动力-测试分享
版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。
THE END
二维码
打赏
文章目录
关闭
共有 0 条评论