Go Web项目,session使用中的小坑

使用的 Gin框架,在使用session的时候遇到了一些小坑,分享一下,同时也希望有大佬能解答一下。
设置session的时候,set 之后,session并没有生效,必须要接着 save 才能生效,代码如下:

session := sessions.Default(c)
session.Set("mysession", "username")
session.Save()

网上有解释说:

Session的save()方法完成以下的操作:
(1)把Customer对象加入到缓存中,使它变为持久化对象。
(2)选用映射文件指定的标识符生成器为持久化对象分配惟一的OID。Customer.hbm.xml文件中元素的子元素指定标识符生成器
(3)计划执行一个insert语句,把Customer对象当前的属性值组装到insert语句中

值得注意的是,save()方法并不立即执行SQL insert语句。只有当Session清理缓存时,才会执行SQL insert语句。如果在save()方法之后,又修改了持久化对象的属性,这会使得Session在清理缓存时,额外执行SQL update语句。以下两段代码尽管都能完成相同的功能,但是左边代码仅执行一条SQL insert语句,而右边代码执行一条SQL insert和一条SQL update语句。左边代码减少了操作数据库的次数,具有更好的运行性能。

这一段不是很懂,因为我使用的是redis存储session。
以我的理解来看,第3步其实是可变的,根据你选用的存储方式,执行存储动作?前面的set方法,其实只是加入到了缓存中,只有使用save了,才会真正的存储下来。 我这样理解对吗?

然后在 logout 的删除缓存的时候,delete方法任然不生效,使用浏览器的后退任然能跳转,只有在加上save方法后,才生效,代码如下:

session := sessions.Default(c)
session.Delete(SessionContextName)
session.Save()

我看了redis,这个session的key-value还是存在的,同样并没有被删除掉,那为什么save之后,我再使用后退就会走到session校验不通过?
有没有大神可以帮忙解答一下,感谢万分!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值