





Gin Cookie
Gin中提供了cookie 的功能,下面为您阐述它。
Cookie实际上就是服务器保存在浏览器上的一段信息(用于在浏览器中保存一些小数据,例如客户标识、用户非敏感数据)。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。Cookie由服务器创建,并发送给浏览器,最终由浏览器保存。
func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool) {if path == "" {path = "/"}http.SetCookie(c.Writer, &http.Cookie{Name: name,Value: url.QueryEscape(value),MaxAge: maxAge,Path: path,Domain: domain,SameSite: c.sameSite,Secure: secure,HttpOnly: httpOnly,})}
package mainimport ("github.com/gin-gonic/gin")func main() {router := gin.Default()router.GET("/set_cookie", func(c *gin.Context) {// 设置cookiec.SetCookie("test_cookie", "cookie_value", 3600, "/", "localhost", false, true)})router.Run()}
func (c *Context) Cookie(name string) (string, error) {cookie, err := c.Request.Cookie(name)if err != nil {return "", err}val, _ := url.QueryUnescape(cookie.Value)return val, nil}
package mainimport ("github.com/gin-gonic/gin")func main() {router := gin.Default()router.GET("/get_cookie", func(c *gin.Context) {data, _ := c.Cookie("test_cookie")c.String(200, data)})router.Run()}
■ ■■■■
package mainimport ("github.com/gin-gonic/gin")func main() {router := gin.Default()router.GET("/del_cookie", func(c *gin.Context) {// 设置cookie MaxAge设置为-1,表示删除cookiec.SetCookie("test_cookie", "cookie_value", -1, "/", "localhost", false, true)c.String(200,"删除cookie")})router.Run()}

■ ■■■■
package mainimport ("net/http""github.com/gin-gonic/gin")func LoginAuthMiddlewareware() gin.HandlerFunc {return func(c *gin.Context) {//cookie, err := c.Cookie("username")if err == nil {if cookie == "zhangsan" {c.Next()return}}c.JSON(http.StatusUnauthorized, gin.H{"error": "err"})// 验证不通过,不再调用后续的函数处理c.Abort()return}}func main() {router := gin.Default()// 需要携带cookie可访问router.GET("/users", LoginAuthMiddlewareware(), func(c *gin.Context) {c.String(http.StatusOK, "users")})// 登录,设置cookierouter.POST("/login", func(c *gin.Context) {username := c.PostForm("username")password := c.PostForm("password")if username == "zhangsan" && password == "admin666" {c.SetCookie("username", "zhangsan", 60, "/", "localhost", false, false)c.JSON(http.StatusOK, gin.H{"code": http.StatusOK,"msg": "登录成功",})} else {c.JSON(http.StatusOK, gin.H{"code": http.StatusUnauthorized,"msg": "登录失败",})}})router.Run()}
现在,将上面的代码运行起来,可以分别测试这两个API了观察现象了。按照流程,应该先登录:


可以看到,zhangsan 成功登录了。接着在在/users接口的headers中带上刚才的cookie的值,访问成功:

■ ■■■■

总结
本文主要介绍了,在Gin中cookie的相关知识,并介绍了如何在Gin中该如何操作cookie,另外介绍了一个cookie的demo案例。
后续,我将继续为您介绍Gin的一些其他教程,敬请期待~~。

长按二维码关注我们吧
不要错过


文章转载自一起Go技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




