【Golang】Cookie保持会话状态的实现

前言

在选择session和cookie时,考虑session位于服务器端,而cookie位于用户浏览器端,session的安全性更高。现在更多时候,写网站后台选择用session来保持会话状态。使用session时,我自己封装过一次session包,写的过程比较复杂,花了几天时间,而github.com/gin-contrib/sessions这个包可以直接调用即可(自己封装session包是一次对原理的深入理解,但在做项目时其实不用花时间去封装…)
关于session包我写的一点点使用说明:github.com/gin-contrib/sessions
而cookie用起来就很简单了,这篇讲cookie最常用的运用,包直接引入的是net/http,也就是说不需要再多引入其他包来完成了。

使用编辑器及测试工具

vscode、chrome、postman(非常推荐的请求调试工具)

cookie测试函数

设置cookie
func setCookieHandler(c *gin.Context) {
	test_cookie := &http.Cookie{
		Name:     "test_cookie",
		Value:    "username",
		Path:     "/",
		HttpOnly: false,
		MaxAge:   3600,
	}
	c.Writer.Header().Set("Set-Cookie", test_cookie.String())
	//http.SetCookie(c.Writer,test_cookie)
}

在这里插入图片描述

跨路由获取cookie

在另一个路由下获取生成的cookie值

func getCookieHandler(c *gin.Context) {
	test_cookie, _ := c.Request.Cookie("test_cookie")
	fmt.Println(test_cookie)
}

在这里插入图片描述

在登录函数写cookie

/login中写cookie,将生成的cookie存储到浏览器端,保持会话状态,方便后续获取cookie参数

	username := c.PostForm("username")
	password := c.PostForm("password")
	fmt.Println("Server reveive data:", username, password)

	uid_cookie := &http.Cookie{
		Name:     "uid",
		Value:    username,
		HttpOnly: false,
		MaxAge:   3600,
	}
	c.Writer.Header().Set("Set-Cookie", uid_cookie.String())

然后登录一个用户名试试


在这里插入图片描述
在这里插入图片描述

获取cookie的方法和前面测试中的方法一致…就不再阐述了

安全问题

" 对于开发者,cookie的是web开发里程上的一大发明,cookie是小甜点,绝不是恶魔。但是,如果使用不当,小甜点发霉了一样会有毒。"

但是我们发现cookie设置为我们真实的id,未加密cookie让安全问题难以得到保障,所以要对cookie进行加密存储,这个环节也非常关键,github.com/gorilla/securecookie包可以提供一个HashKey

在这里插入图片描述

	var hashKey = []byte("very-secret")
	var s = securecookie.New(hashKey, nil)
	encoded,_:=s.Encode("test_cookie","test_cookie")

在这里插入图片描述

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.zwX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值