关于接口的 不能使用 session 哪么怎么保存常规数据?

2019-07-28 14:00:09 +08:00
 JasonTsang

一般我们开发网站是经常 要使用到 session 去保存用户信息,哪么在接口时 因为是无状态,怎么保存一些用户信息?

4260 次点击
所在节点    程序员
31 条回复
sinv
2019-07-28 20:49:58 +08:00
好吧,楼上已经解答清楚问题了,我就来整点臭氧层子:楼主标题里用错字了,应该是“那么”。
“那么”:nà,指示代词;
“哪里”:nǎ,疑问代词。

不杠,不是处女座,也不是强迫症。
JasonTsang
2019-07-28 21:31:58 +08:00
@lihongjie0209 这个就有问题了,据我所知,只要 IP 变了,服务器会立刻为会话分配一个新的 session_id 的,而你只把 session_id 放到 header 中,在代码里获取这个 session_id 这样是无法感知用户的上网环境变化的。所以原来人家在 cookie 中携带 session_id 是有 HTTP 大框架的支持。
xy90321
2019-07-28 21:37:09 +08:00
@JasonTsang
概念要清楚,session id 只是用来给你识别的
客户端防爆破应该靠密码和本地加密( which 现在又客户端设备自主提供)
网络传输层则由你实现,依靠 https 或者 其他不对称加密手段
lihongjie0209
2019-07-28 21:38:04 +08:00
@JasonTsang #22

首先服务器分配 session 这个是具体的实现, 有不同的策略可以定制.

其次 sessionId 什么时候发送, 怎么发送, 现在都脱离的浏览器的 cookie/session 这种默认全自动的方式, 都需要前端(客户端)写代码决定. 不需要服务器根据用户的 IP 做什么处理.


举个例子, 我们的应用服务器部署了 3 个节点, IP 分别为 A,B,C, 但是这三个节点都会去使用同一个微信的 accessToken 和微信服务器通信, 微信不会因为我们的 IP 变化就把请求拒绝.
way2create
2019-07-28 21:46:27 +08:00
归根究底都是要个 id 来区分 session 至于数据安全是其他层面的问题了
xiaotuzi
2019-07-28 21:52:21 +08:00
我觉得绝对安全是没法做到的,web 应用基本上只要获取发送头部数据及 cookie 基本就有可能被盗用。
而我觉得数据交互过程中进行过加密,那么就算你获取到了数据,也不清楚里面的内容是什么(不看源码的情况下),所以一定程度保证了安全性。
zjsxwc
2019-07-28 21:59:22 +08:00
接口无状态说白了,
就是把数据保存到客户端自己里面,
服务端不保存数据,
于是相对于传统的 session 减少了服务端查询数据数据库、加载数据负担,
每次客户端请求接口会带上用户的所有数据,
换句话说就是通过带宽减轻服务器压力,

简单来说,没有数据库等存储权限的服务器,只提供执行逻辑的服务就是无状态服务。
zjsxwc
2019-07-28 22:01:09 +08:00
@zjsxwc #27 原文:“接口无状态说白了,就是把数据保存到客户端自己里面,服务端不保存数据,于是相对于传统的 session 减少了服务端查询数据数据库、加载数据负担,每次客户端请求接口会带上用户的所有数据,换句话说就是通过带宽减轻服务器压力,简单来说,没有数据库等存储权限的服务器,只提供执行逻辑的服务就是无状态服务。”


回复:可以通过 rsa 不对称加密来防止客户端发过来的数据被篡改。
icy37785
2019-07-28 22:22:30 +08:00
楼主自己把自己绕晕了,其实还是有些概念混淆了。无状态跟有状态区别不是那么大的,只是把原来 cookie 里的东西放 token 里了。
xnotepad
2019-07-29 09:23:31 +08:00
@JasonTsang cooke 也能被抓,一样的。

不过如果开了 HTTPS,除了 URL,其它内容都是加密传输了,理论上是安全的。
moonsola
2019-07-29 10:41:19 +08:00
传统的网站应用里,session_id 有两种传递方式:cookie 和 url 参数,一般都放 cookie 里
开发接口时,使用 session_id 的话同样有两种传递方式:header 和 url 参数,基本都放 header 里。

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

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

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

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

© 2021 V2EX