Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 72.6MB ·虚拟内存 1303.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
HTTP 是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出。
cookie 是解决 HTTP 协议无状态的方案之一。
cookie 是服务器保存在客户端浏览器的数据,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。
cookie 由服务器创建,并发送给浏览器,最终由浏览器保存。
gin 框架提供了 cookie 操作的支持。
gin 框架通过 gin.Context 结构对象操作 cookie,提供了获取 cookie 数据和写入 cookie 的方法。
gin 框架获取 cookie 键值的方法:
func (c *Context) Cookie(key string) (value string, err error) {
其中 key 为 cookie 键,value 为返回的对应值。
gin 框架写入 cookie 键值的方法:
func (c *Context) SetCookie(key, value string, maxAge int, path, domain string, secure, httpOnly bool)
其中 key 为 cookie 键,value 为设置的对应值。
package main import ( "github.com/gin-gonic/gin" ) func main() { engine := gin.Default() // 读取 cookie engine.GET("/read_cookie", func(context *gin.Context) { val, _ := context.Cookie("name") context.String(200, "Cookie:%s", val) }) // 写入 cookie engine.GET("/write_cookie", func(context *gin.Context) { context.SetCookie("name", "Shimin Li", 24*60*60, "/", "localhost", false, true) }) // 清理 cookie engine.GET("/clear_cookie", func(context *gin.Context) { context.SetCookie("name", "Shimin Li", -1, "/", "localhost", false, true) }) engine.Run() }
运行程序,在浏览器端分别执行写入、读取、清除的操作分别是:
针对 cookie 的缺陷,还有另外的解决方案,比如 jwt。
web 应用程序中, 记录客户端的状态除了使用 cookie 外,还经常使用 session。session 是服务器端使用的一种记录客户端状态的机制,使用上比 cookie 简单一些,相应的也增加了服务器的存储压力。gin 框架提供了 session 操作的支持。通常我们使用 gorilla/sessions包,它是由第三方提供的 session 操作包。