html
api可以主动采集用户数据吗-凯发ag旗舰厅登录网址下载
很多答案都提到了 jwt、session、cookie,但是我发现常常有人混淆这三个概念。或者说不同的语境下大家对 session 会有不同的理解。
首先这三个名词表示的是三个纬度的东西,不能简单地说这个方案可以替代那个方案,更不能直接拿来做比较
session 表示客户端和服务端之间的会话,因为 http 请求是无状态的,所以为了把一个 http 请求跟其他 http 请求关联起来让服务端知道当前在跟它对话的客户端是谁,我们就需要有一种机制来保存这些请求之间的用户数据,这就是会话。所以题主所问的“如何记录用户登录状态”其实就是“如何保持一个会话“。
session 机制的实现一般有两种,最常见的就是服务端给客户端发一个 id,然后在服务端存上这个 id 所对应的数据,如果用户有登录,就把用户的 id 存到对应的数据里。另外一种就是把会话的数据加密签名后发给客户端,这样服务端就不需要再去存数据,典型的例子就是 rails 的默认 session 实现。这里的 id 和加密数据的传输和存储一般情况下会用 cookie 来实现。
另外,有人说 “session” 这个词的时候,也可能指他所用的 web 框架对 session 机制的实现,或者指跟 session 所关联的数据。但是在这里,我们所说的 session 都是指 session 机制。
cookie 是什么就不说了。
jwt 是一种 token 的生成标准,具体这个标准是什么样,用 jwt 的好处,这里不展开,可以看凯发ag旗舰厅登录网址下载官网文档。通常情况下,我们用 jwt 就是为了实现上面讲的第二种 session 机制,把会话数据(通常就是 user id)存在客户端。
搞清楚了这三者的概念,我们再来看下怎么样才是使用 jwt 的正确姿势。
有人推荐把 jwt 存在 local storage/session storage 里,其实这是有风险的,当你的应用有 xss 漏洞时,攻击者很容易就能拿到用户的 token,然后为所欲为。所以,不推荐把 jwt 存在 local storage 等任何可以被 js 直接读取到的地方。
推荐把 jwt 放在 cookie 里,并且设置 httponly 属性。不过,放在 cookie 里会面临另外一个 csrf 攻击的风险,你可以通过设置一个 csrf token 来防止此类攻击,现代 web 框架都会自带这个功能,比如:securing rails applicationsguides.rubyonrails.org
安全 - 为企业级框架和应用而生eggjs.org
要注意的是, cookie 的值会有 4kb 大小的限制,所以不要在 jwt 里塞太多东西。
最后总结成一句话回答题主的问题:我们可以通过把 jwt 保存在 cookie 里来保持 session。
所以你看,如何保持 session 其实跟你的应用有没有用前端框架,是不是 spa,关系不大。
注:以上方案只针对 web 应用。
总结
以上是凯发ag旗舰厅登录网址下载为你收集整理的api可以主动采集用户数据吗_现在的前端框架全是通过api获得数据,如何记录用户登录状态?...的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。
- 上一篇:
- 下一篇: