先来了解一下,cook,session
HTTP 是无状态的协议:每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次请求的发送者是不是同一个客户端。服务器与浏览器为了进行会话跟踪,就必须主动的去维护一个状态,这个状态用于告诉服务端前后两个请求是否来自同一个浏览器。这个状态就需要通过 cookie 或者 session 来实现。
cookie 存储在客户端:cookie 是服务器发送到用户浏览器,并进行保存到本地的数据,它会在浏览器下次向同一服务器再发起请求时被再一次被带到并发送到服务器上面
cookie 是不可跨域名的:每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用
什么是 Session
session 是区别 cookie 的另一种记录服务器和客户端会话状态的机制
session 是基于cookie 实现的,session 存储在服务器端,sessionid 会被存储到客户端的 cookie 中
session 认证流程
用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 session
服务器响应客户端的请求,并返回唯一标识信息 sessionid 给浏览器
浏览器把返回的 sessionid 存储到 cookie 中,同时 cookie 记录次 sessionid 属于哪个域名
当用户第二次访问服务器的时候,请求自动判断此域名下是否存在 cookie 信息,如果存在就将 cookie 信息发送给服务端,服务端会从 cookie 中获取 sessionid,再根据 sessionid 查找对应的 session 信息,如果找到 session 证明用户已经登录,可以执行后面操作,如果没有找到,说明用户没有登录或者失败。
03
cookie 和 session 的区别
安全性:session 比 cookie 安全,session 是存储在服务器端,cookie 是存储在客户端
存储值的类型不同:cookie 只支持存字符串数据,设置为其它类型的数据,需要将其转换成字符串,session 可以存任意数据类型。
有效期不同:cookie 可设置为长时间保持,session 的失效时间比较短,客户端关闭就会失效
存储大小不同:单个 cookie 保持的数据不能超过 4KB,Session 存储数据高于 cookie,当访问量过多,会占用更多的服务器资源。
04
什么是 Token(令牌)
访问接口(API)时所需要的资源凭证,比如订单接口需要带上登录返回的 token 值,才能访问订单接口数据
常见的 token 组成:UID(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token+ 请求数据进行几次 md5 之后的值)
token 的特点:
服务端无状态化、可扩展性好
支持移动端设备
安全性好
支持跨程序调用
token 的身份验证流程:
①、客户端使用用户名和密码,请求登录
②、服务端收到请求,验证用户名和密码
③、验证成功之后,服务端返回一个 token,并把这个 token 发送给客户端
④、客户端收到 token 之后,会把它存储起来,放入 cookie 里面
⑤、客户端每次想服务器请求资源的时候,都需要带着这个 token
⑥、服务端收到请求的时候,验证客户端请求里面带着的 token,如果验证成功,就向客户端返回请求的数据
每一次请求都需要携带 token,需要把 token 放到 HTTP 的请求头里面
基于 token 的用户认证,服务端不用存放 token 数据。
05
Token 和 session 的区别
Session 是一种记录服务器和客户端会话状态的机制,使服务端有状态化,可以记录会话信息。
token 是一种令牌,访问接口(API)时需要的凭证,也像古代进入到城里需要腰牌一样。token 使服务器无状态化,不会存储会话信息。
token 的安全性要好于 session,每次请求都有签名,也就会出现每次的 token 都会变化,也可以防止一定的攻击、
06
什么是 JWT
JSON Web Token(简称 JWT)是目前最流行的跨越认证解决方案。
是一种认证授权机制
JMT 是在网络应用环境之间传递声明,而执行的一种基于 JSON 的开发标准
JWT 的认证流程:
用户输入用户名/密码登录,服务器认证成功之后,会返回一个 JWT 给客户端
客户端将 token 保存到本地(通常使用 localstorge)
当用户访问一个受保护的路由或者资源的时候,需要请求头的 Authorization 字段中使用 Bearer 模式添加 JWT
服务端的保护路由将会检查请求头 Authorization 中的 JWT 信息,如果合法,则允许用户的行为
JWT 内部保护了一些会话信息,减少了需要查询数据库的需要
JWT 并不使用 cookie,可以使用任何域名提供你的 API 服务,不需要担心跨域的问题
用户的状态不存储在服务端的内存中,是一种无状态的认证机制
07
Token 和 JWT 的区别
相同点:
都是访问资源的令牌
都可以记录用户的信息
都是使服务端无状态化
都是只有验证成功后,客户端才能访问服务端上受保护的资源
两者的区别:
Token:服务端验证收到客户端发送过来的 token 时,需要查询数据库获取用户信息,验证 Token 是否有效
JWT:将 Token 和请求信息加密后存储在客户端,服务端只需要使用密钥进行校验即可,不需要查询或者减少查询数据库,因为 JWT 自己包含了用户信息和加密的数据
常见的前后端鉴权方式:
Session-Cookie
Token 验证(包括 JWT,sso)
Oauth2.0
Fiddler简介
b/s架构 (浏览器到服务器架构)
http是 超文本协议.
fiddler原理
Fiddler是位于客户端和服务器端的HTTP代理
因为ie 谷歌浏览器 他们默认就是读的系统代理.
fiddler只要打开就会设置成代理.
通过ping域名可以得到主机ip地址.
http
http请求报文
请求方法
URL :
请求头
请求头是可以自定义的.
http响应报文
状态码
响应头
重复测试浏览器的时候应该去缓存刷新 shift +f5
fiddler 的菜单栏
下面的 是 清除 不是200的状态 ,清除不是浏览器发出的
重放快捷键 r .
快捷键 shift + r 可以设置 重放次数
这里重复50次, 是串行的 和Jmter不一样, Jmter是并发的. 这里只是测试一下 小小的压力测试.
Jmter测试的是性能方面的.
快捷delete 是删除 , shift + delete 是删除 选中以外的.
上面这里设置的断点, 表示请求前断点.
上面出现连接 那里红色的T 表示 还没有发送 到服务器就停止了. 如果再点击上面go 就会发到服务器.
Stream 一般我们就默认的
find 查找可以快速定位请求
黄色部分为查找的内容.
session面板
Fiddler:增加IP列
运行fiddler,菜单,Rules->Customize Rules,打开“Fiddler ScriptEditor”
Ctrl+F查找“static function Main()”字符串,然后添加以下代码:
FiddlerObject.UI.lvSessions.AddBoundColumn(“ServerIP”, 120, “X-HostIP”);
保存完 重启打开 列名可以随意拖动 如下
命令
高手,可以在这个断点,响应后修改数据,在返回给客户端,去欺骗客服端.
Inspectors检测器
上面security 是安全相关的. 不是性能
statistics 统计
AutoResponder (自动响应器)
替换图片
Composer 设计者
Composer 里面可以一个发包功能
Filters
过滤器
请求前断点
取消请求前断点 bpu
响应后断点
取消 bpafter
弱网测试
模拟网络限速
这样它就会网络延迟
它是怎么做到的呢?
主要是有个脚本, 我们也可以设置延迟长一点.
然后勾选模拟弱网限速
Https抓包
在抓包https之前先进行设置
确定之后,我们点击确定.
然后可以查看我们安装好的证书.
火狐如果浏览器里面的百度抓不到,应该把fiddler的证书导出来后,在导入火狐里面
手机上 设置代理安卓app 抓包