go解决gin设置session中间件Cookie无效

348 阅读1分钟

要实现golang对接cas认证,请查看golang实现CAS认证

背景

使用gin对接cas认证,当认证通过后需要记录登陆状态避免重复重定向到登录页

问题以及分析

当使用session时会发现登陆过后能正常写入session,但是第二次请求时候又会被重定向到cas登陆,这是因为cookie没用被正常写入。检查前端请求的响应头和请求头的cookie时发现报错“尝试通过Set-Cookie标头设置Cookie时被阻止,因为它具有“Secure“属性,但未通过安全连接发送”。这是由于本地服务是通过http而不是https协议,所以不允许setcookie。

image.png

image.png

解决方案

1、如果你的服务是http的,在创建session时,需要将Secure设置为false,

	store.Options(sessions.Options{
		Path:     "/",
		Domain:   "",        // 设置你的域名,留空则为当前域名
		MaxAge:   86400 * 7, // 一周
		HttpOnly: true,
		Secure:   false, // 在生产环境中设置为true以确保安全传输
	})

2、如果你的服务通过nginx反代,还需要检查nginx的配置中是否有Secure:配置,如果有需要将其删除。