gin cookie和session

● HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用 Cookie 或者 Session 实现

● cookie 是存储于访问者计算机的浏览器中(比如保存用户的登录状态),可以让我们用同一个浏览器访问同一个域名的时候共享数据

设置和获取cookie
  • context.Set()只能实现一个页面中的数据共享
  • Cookie可以实现多个页面中的数据共享
router.POST("/index", func(context *gin.Context) {

		/*
			SetCookie参数:
				name:key
				value:值
				maxAge int : 过期时间,单位秒
				path:cookie生效的路径,设置为"/"时,表示该Cookie将在整个网站的任何路径下都可用,只要属于同一个域名
				domain string:cookie对应的域,本地域名使用localhost
				secure bool : 是否安全的cookie(只在https协议下生效)
				httpOnly bool:是否限制浪拉山情脚本对cookie的操作,比如使用JavaScript等客户端脚本语言访问该Cookie
		*/
		// 设置cookie
		context.SetCookie("username", "li", 3600, "/", "localhost", false, false)

	})
func (con DefaultController) GetInfo(context *gin.Context) {
	// 获取cookie
	username, err := context.Cookie("username")
	if err != nil {
		context.String(http.StatusBadRequest,"cookie获取失败")
		return
	}
	context.String(http.StatusOK,username)
	

}
删除cookie
// 设置cookie的时间为-1
		context.SetCookie("username", "li", -1, "/", "localhost", false, false)})
多个二级域名共享cookie
// 设置cookie的的域 
		// 设置的域为.itying.com,那么 任意前缀.itying.com 都可以共享cookie,比如a.itying.com、b.itying.com 
		context.SetCookie("username", "li", 3600, "/", ".itying.com", false, false)
session

session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session保存在服务器上

当客户端浏览器第一次访问服务器并发送请求时,服务器端会创建一个 session 对象,生成一个类似于 key,value 的键值对,然后将 value 保存到服务器 将 key(cookie)返回到浏览器(客户)端。浏览器下次访问时会携带 key(cookie),找到对应的session(value)

基于cookie存储session

Gin 官方没有给我们提供 Session,可以使用第三方的 Session 中间件来实现

"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
配置中间件
// cookie.NewStore创建一个基于cookie的存储引擎,参数是字节切片,自定义的用于加密的密钥
		  // 如果我们想将 session 数据保存到 redis而非Server本地,只要将 session 的存储引擎改成 redis引擎 即可
		store := cookie.NewStore([]byte("ses7655s"))
		// 设置session中间件,第一个参数是session的名字,也是cookie的名字,store的创建的存储引擎,也可以替换其他的存储引擎
		router.Use(sessions.Sessions("sessionName", store))
设置session
func (con DefaultController) SetSession(context *gin.Context) {
	// 获取session对象
	// sessions.Default创建一个默认的会话管理器,返回一个*sessions.Session对象,用于管理和存储会话数据

	session := sessions.Default(context)
		// 设置过期时间,如果不设置,默认的过期时间是30天
	session.Options(sessions.Options{
		MaxAge: 3600 * 6, // 过期时间是秒

	})
	
	// 设置session
	session.Set("username", "li")
	// 保存session,必须调用
	session.Save()

}
获取session
func (con DefaultController) GetSession(context *gin.Context) {
	session := sessions.Default(context)
	// 获取session
	username := session.Get("username")
	user,_ := username.(string)
	context.String(http.StatusOK, user)
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值