两天了,还是没弄明白 go 的第三方会话库,求指个路

2025 年 10 月 5 日
 shendaowu
我的需求是使用 postgresql 和 gin ,以及 gin-contrib/sessions 实现会话。用那个 gorm 会话驱动有什么好处吗?我打算在项目中用 gorm 。没什么好处直接用 postgresql 会话驱动就行了。

如果是直接上手试的话,我估计我应该能达到凑合能用的程度。但是我这个人死脑筋,我想至少对会话中的关键功能比较了解之后再写代码。我应该主要是卡在这上面了。我找到的大部分内容好像都给我一种没说明白的感觉,包括那些库的文档。比如 gorilla/sessions 、wader/gormstore 和 gin-contrib/sessions 。很多参数我都不知道是干什么的。比如各个库中的那个让我异常纠结的类似 func NewCookieStore(keyPairs ...[]byte) *CookieStore 中的 keyPairs 。还有会话的整个使用流程中对应使用哪些函数我也搞不明白。会话我是大体理解的,但是感觉没法对应到具体的函数上。
3171 次点击
所在节点    Go 编程语言
9 条回复
greensea
2025 年 10 月 5 日
直接自己写一个,没多少行代码的
shendaowu
2025 年 10 月 5 日
@greensea #1 我怕写出 BUG 。我对减少 BUG 有强迫症。
SethShi
2025 年 10 月 5 日
哪里不理解, gin-contrib/sessions 用起来就挺简单, 只用一个 key, 这个是加密用的
至于 gorilla/sessions 有多个 key, 是为了轮换 key, 因为 key 可能会泄露, 就可以每段时间换一个
如:一开始 A, 一段时间后是 A1, A (A1 用来加密, A1 用来解密, 解密失败, 用 A 再解密一次)

所谓这些库都是用户请求之后, 本质都是生成一个唯一 id 存入到
response.setHeader('set-cookie', 'uuid 什么的都可以, 还可以加域名')


然后服务端下一次来的时候, 可以通过这个 uuid 去 redis/内存去获取存储的值
Gilfoyle26
2025 年 10 月 5 日
@shendaowu #2 没有失败,永远不会进步
treexie
2025 年 10 月 5 日
1 、cookie 中保存的是 session 的 id ,例如:JSESSIONID=xxx(随机字符串,例如 uuid)
2 、session 是保存在数据库(常用 redis),查询的时候通过 xxx 来查询对应的 session 数据(想保存什么数据应用自己定义)
3 、担心 xxx 被猜到,于是增加一个签名值,sha256(xxx+密钥),这样别人就算猜到 xxx 也无法伪造签名值。有些框架会使用 JSESSIONID=xxx.signature 的形式保存,有些是分开保存,另外创建多一个 cookie 保存签名值 JSESSIONID_SIGN=signature
4 、密钥也需要定期更换,防止密钥泄露后,别人伪造签名值,但是密钥更换后,之前的 session 都无法验证了,所以需要保存一段时间的密钥( keyPairs ),验证时用最新的密钥验证失败后,再用历史密钥验证(有些框架在此时又会重新一个新的签名,刷新 cookie 保证签名值是最新的)
default996
2025 年 10 月 5 日
我现在一般都是把库项目的 readme 和 example 复制到一个文件中,然后让 ai 给我写一个最小 demo 并解释
tairan2006
2025 年 10 月 6 日
自己做个 token header 不就完了,还要第三方库?
ericguo
2025 年 10 月 7 日
要不你看看 sponge ( https://go-sponge.com/zh/getting-started/overview.html ) ?

其实这些都差不多的,甚至你直接要求 codex 给你写一个也很难出错的。
MIUIOS
2025 年 10 月 8 日
已经好久没用过 cookie 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1163431

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX