使用 token 不是还是要每次都需要从数据库加载用户信息么和传统 session 有什么区别?

2021-09-13 08:33:40 +08:00
 SystemLight
8793 次点击
所在节点    Java
48 条回复
2i2Re2PLMaDnghL
2021-09-14 02:19:53 +08:00
传统的 session id 是任何能写入数据库的人可以写入 session data,任何能读取数据库的人可以读取 session data,数据实际存储在一个中心化的设施上。
JWT 则是所有拿到密钥的人都可以写入或读取 JWT payload,数据实际存储在客户端。
Quarter
2021-09-14 09:06:38 +08:00
token 其实就是 session 另一种形式,之前通过在 cookie 里面设置一个 id,然后通过 cookie 中的 id 在 session 里面查询缓存数据,token 功能也是如此,但是 token 不局限于 cookie 存储,可以使用 localStorage 等前端存储使用,另外 token 也可以衍生加入用户信息或者其他关键信息( jwt ),这样可以从 token 中获取到一些用户信息,这就是我理解的他们之间的联系

至于数据读取问题,你提出的问题确实存在,我们还是要从缓存甚至数据库读取更多的用户信息,但是 token 的好处在于可以方便统一认证或者跨站认证,我们可以携带 token 去访问另一个服务,同时携带了 token 信息直接免除了登录,而 cookie 就不那么方便了,一般为了安全性我们也不让 js 读取 token
ihipop
2021-09-14 10:48:00 +08:00
@skypyb jwt 存所有业务内容?业务内容算不算信息?通过 jwt 获取业务内容的都是伞兵?
summerLast
2021-09-14 10:58:26 +08:00
这个问题可以拆解成 3 部分
1 token 和 session 相同处是什么
因为 http 是一个无状态的协议 但很多场景需要状态 token 和 session 本质都是令牌或凭证
2 token 和 session 区别是什么
session 是 token 的一种实现 此处我们谈 token 的时候可以换成 JWT Token 和 session 去做对比,那 JWT Token 和 session 区别是什么呢? JWT 全称 JSON Web Token 也就是说是 JSON 格式的 Web 令牌,session 或 JWT Token 都是一个存放信息的容器,关键在于状态( C/S )谁来保持,及什么样的信息放在哪是服务器还是客户端更合适,放服务器优势是什么劣势是什么,放客户端优势是什么劣势是什么(可以参考计算机缓存内存硬盘的架构)
3 各自优势是否可结合
在一个应用多实例或前后端分离的情况下,不易变的信息放 JWT Token 相对更合适;不需要考虑这种情况下,放 session 更合适, 或者换句话说 让 Token 只做一个凭证就是一个身份证的事情,后面的映射交给后端
题外话:
其实就像为什么了有了硬盘还需要内存 有了内存还需要 CPU 缓存 ,结合各自的优势让问题得到更好的解决是目前比较好的方案,而不是非此即彼
summerLast
2021-09-14 11:08:37 +08:00
此处不应该拿 session 和 token 对别 ,而是应该拿 cookie-session 中的 sessionId 和 jwt token 对别
ptrees
2021-09-14 11:38:38 +08:00
我用 jwt 就只是存 userid,其他的还得去数据库取,这种用法不对吗?
fatttt
2021-09-14 17:23:43 +08:00
@skypyb jwt 容量有限。比如有用户权限信息的时候,就不够了。只能存个 id,然后查库缓存。
fengpan567
2021-09-20 21:22:01 +08:00
token 和 session id 性质一样,对于集群环境,session 需要用组件打通各个节点服务的 session 数据来保证每个节点可以识别出用户,token 则是自己手动去查库或者 redis,还是 token 更灵活一点

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

https://www.v2ex.com/t/801448

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

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

© 2021 V2EX