session和token

发布时间:2022-07-02 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了session和token脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
http协议无状态的问题:1.不安全2.需要重复传入相同的数据为了解决这两个问题引入了session## session让服务器记住客户端,比如存储账号密码、访问次数等。默认在服务器中保存数据,并生成一个session_id,用来代表存储的数据,通常是加密的比如session = 'yuz;2021-10-16 20:28; 手机'session_id = 'yuz'  # 和session发生关联的一个简短数据,一般是用户名和密码加密后的结果服务器发送setcookie: sessionid='yuz'   客户端下次请求带cookie: sessionid='yuz'服务器通过setcookie的响应头把session_id返回给客户端,让客户端把session_id存在cookie,客户端下次请求就通过cookie把session_id发送给服务器## session会带来的问题- 每个用户都要创建一个sessionid,都存到服务器当中,会占用很多服务器内存,影响服务器的性能。- 当并发查询较大时,服务器响应很慢- session跨域比较困难,假如是多机器,那每台机器需要保持数据的一致和同步性,响应将会更慢解决方法:1.使用数据库来存储数据,比如redis,解决服务器内存的压力,但请求数多时还是会慢2.配置redis集群,可以解决请求数多的问题,尽量不让节点挂掉,有节点挂了也不影响服务执行上面的问题都是存数据到服务端带来的,从根上解决问题,需要数据不存服务端,即将传过来的数据打包成token,直接给客户端,客户端解码就好了,但这种方式太容易被伪造,故为了安全性,增加签名sign。## 签名当用户登录时,服务器提取用户名或者id组装成payload ,代表用户数据,然后用header拼接Payload组装成新的数据,秘钥存储在服务器中,相当于公章,通过HS256这一类的加密算法把秘钥和数据加密得到签名sign。 (哈希算法 这种加密算法是不可逆的)然后再拼接header(说明一些其他的数据,比如加密的算法类型)、 payload和sign,得到token。token有时效性,会过期## 什么是token 在接的响应结果中,经常会出现类似这样的返回值。{    "msg": "success",    "token": "eyJzdWI10iAiexV6IiwgInJvbGUi0iAiYWRtaW4ifQ"}往往需要在访问下一个接口时传递token数据。1 curl -x POST -H Authorization:eyJzdWIi0iAieXV6IiwgInJvbGUi0iAiYwRtaw4ifQ  <http://127 .0.0.1:5000/user>2 {"alg": "HS256" ,"typ": "JWT"}所以token本质上就是用户信息通过编码转化成另-种形态得到 token, 再通过token解码得到用户数据。算法一般是base64urleyJzdWI10iAiexV6IiwgInJvbGUi0iAiYWRtaW4ifQ ---》 {"sub": "yuz","role": "admin"}##区别session:- 把客户端的信息存在服务器- 需要占用服务端的内存、磁盘和数据库- 用户量大时需要频繁查询,影响服务器的响应速度- 跨域困难,多个服务器时,需要保持数据的一致和同步性,也会影响服务器响应速度token:- 不存服务端,直接丢给客户端。客户端一般存cookie,也可以存其他地方,比如indexdb、local storage- 不用耗费服务器的存储资源- 速度快- 跨域方便token的缺点:不能立即注销,不能立即让token失效如果强行废除token,只能再次使用服务器记住,又回到服务器存储资源的问题。不强行废除token就不会存在这个问题##cookiecookie:只是实现token和session的-种手段。cookie只是-一个http请求头字段。

脚本宝典总结

以上是脚本宝典为你收集整理的session和token全部内容,希望文章能够帮你解决session和token所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。