近来,在项目中使用了一段时间的golang进行web开发,相对于java而言,golang语法更为简洁,与docker等集成也更为友好。但是在使用过程中发现开源gin这种web框架,只对session最大生命周期进行了控制,却不支持刷新session生命周期,那么问题来了,如果登录成功,服务端生成一个sessionid,客户端(一般为浏览器)拿着这个sessionid去访问接口数据的时候,服务器对其进行校验,如果校验通过,应当允许客户端访问资源,否则应当跳转到登录页面。校验通过访问到了资源,说明客户端在与服务端进行互动,不应该在session最大存活时间到期被踢出。而目前gin session无法修改session过期时间,经过查看源码,发现session中的Option变量来源于http.Cookie,此类中有一个Expires支持过期时间的设定,因而在校验通过的时候可以通过以下代码实现session过期时间的刷新
validlogin.go中摘取如下代码
//获取cookie中的session名称对应的session
cc,_ :=c.Request.Cookie("sessionid") if cc!=nil{ cookie :=http.Cookie{ Name: "sessionid", Value: cc.Value, Expires: time.Now().Add(du), Path: "/", Domain: "", Secure: false, HttpOnly: true, } //设定客户端cookie http.SetCookie(c.Writer,&cookie) }