Gin中的Cookie和Session的用法
文章目录
- Gin中的Cookie和Session的用法
-
- 介绍
-
- Cookie
-
- 代码演示
- Session
-
- 代码展示
介绍
-
cookie
和session
是 Web 开发中常用的两种技术,主要用于跟踪用户的状态信息。
Cookie
-
func (c *Context) Cookie(name string, value string, maxAge int, path st服务器托管网ring, domain string, secure bool, httpOnly bool)
-
name
:Cookie的名称 -
value
:Cookie的值 -
maxAge
:Cookie的最大生存时间,单位秒。如果为-1,则会产生一个会话Cookie,不设定过期时间。 -
path
:Cookie路径,默认是’/’ -
domain
:Cookie域名。默认空,代表当前访问的域名。 -
secure
: 是否通过HTTPS传输Cookie -
httpOnly
: 是否只能服务器修改,HTTP请求中不会显示在Cookie头中。 -
在 HTTP 协议中,每个请求都是无状态的,也就是说服务器无法知道当前的请求和之前的请求是来自同一个用户。
Cookie
是一种在客户端存储用户数据的技术,可以帮助服务器识别用户。 -
当用户第一次访问服务器时,服务器可以生成一个唯一的 ID 并将其存储在一个
Cookie
中,然后将这个Cookie
发送给客户端。客户端在收到Cookie
后,会将其存储起来,并在每次发送请求时都将这个Cookie
附加到请求中。这样,服务器就可以通过检查Cookie
来识别用户。
代码演示
- Gin中Cookie的方法只有两个
- 获取cookie:
c.Cookie()
- 设置cookie:
c.SetCookie()
- 获取cookie:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
//使用cookie
r.GET("/cookie", CookieHandle)
r.Run()
}
func CookieHandle(c *gin.Context) {
userID := "userID"
//获取指定的cookie
cookie, err := c.Cookie(userID)
//没有就创建cookie
if err != nil {
c.SetCookie(userID, "0", 60*60, "/", "", true, false)
}
//获取成功就打印cookie
c.JSON(http.StatusOK, gin.H{
"status": cookie,
})
}
Session
-
Go语言中的gin想要用Session需要引入第三方库
- 拉取:
go get github.com/gin-contrib/sessions
- 导包:
import "github.com/gin-contrib/sessions"
- 具体详情:
https://github.com/gin-contrib/sessions
- 拉取:
-
虽然
Cookie
可以用来识别用户,但是它并不能存储大量的用户数据。这是因为Cookie
的大小有限制,而且每个Cookie
都会在每次请求时发送给服务器,如果Cookie
太大,会导致网络延迟。 -
Session
是另一种用于存储用户数据的技术。与Cookie
不同,Session
数据存储在服务器端。当用户第一次访问服务器时,服务器会创建一个新的Session
,并生成一个与之关联的唯一 ID。这个 ID 会被存储在一个Cookie
中,并发送给客户端。这样,当客户端再次发送请求时,服务器就可以通过Session ID
来查找对应的Session
数据。
代码展示
package main
import (
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
store := cookie.NewStore([]byte("secret"))
r.Use(sessions.Sessions("mysession", store))
r.GET("/hello", func(c *gin.Context) {
session := sessions.Default(c)
if session.Get("hello") != "world" {
session.Set("hello", "world")
session.Save()
}
c.JSON(200, gin.H{"hello": session.Get("hello")})
})
r.Run(":8000")
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 文心一言 VS 讯飞星火 VS chatgpt (104)– 算法导论10.1 2题
二、用go语言,说明如何在一个数组 A[1..n]中实现两个栈,使得当两个栈的元素个数之和不为 n 时,两者都不会发生上溢。要求 PUSH 和 POP 操作的运行时间为 O(1)。 文心一言: 在这个问题中,我们要在一个数组 A[1..n] 中实现两个栈,使得…