后台有个a标签
<li><a href="/back/managers/logout" onclick="if(!confirm('确认要退出系统么?')){return false;}">退出</a></li>

应该是访问下面方法的

	//后台退出
		back.GET("/managers/logout", Back.Managers{}.Logout)

 

// 退出
func (m Managers) Logout(c *gin.Context) {
	currentTime := time.Now()
	year, month, day := currentTime.Date()
	hour, minute, second := currentTime.Clock()
	yearMonthDay := fmt.Sprintf("%d-%d-%d %d:%d:%d", year, month, day, hour, minute, second)
	fmt.Println("Logout", yearMonthDay)
	sessionA := sessions.Default(c)
	sessionA.Delete("back_login_manager_id")
	sessionA.Save()
	sessionA.Delete("back_login_manager_name")
	sessionA.Save()
	fmt.Println("开始")
	sessionA.Clear()
	time.Sleep(1 * time.Second)
	fmt.Println("结束")
	sessionA.Save()
	//跳转
	c.Redirect(http.StatusMovedPermanently, "/back/index/index")
	c.Abort()
}

 结果直接去back/index/index

session不删除各种怪事,出现过打开页面检查就能正常退出

有时会去访问logout方法退出,但是点击浏览器返回页面能回到后台,还能查看后台功能,离大谱

有时登录上之后,访问后台其它功能会跳转到登录页,去看代码,逻辑没问题

一度怀疑go与其它后端语言差别这么大吗?

最后不知在哪里看的资料,要在路由处加删除禁用缓存的代码,才恢复

func Router() *gin.Engine {
    r := gin.Default()
    // 清除页面缓存中间件
    r.Use(func(c *gin.Context) {
        c.Writer.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
        c.Writer.Header().Set("Pragma", "no-cache")
        c.Writer.Header().Set("Expires", "0")
        c.Next()
    })

 

posted on 2024-01-16 11:54  Beautytoloveme  阅读(3)  评论(0编辑  收藏  举报