B03_接口测试前置知识补充:cookie和session
B03_接口测试前置知识补充:cookie和session
cookie,可以翻译成“曲奇”或者“小饼干”,指用户通过浏览器访问网站时,网站为了记录用户浏览历史,辨别用户身份等储存在用户本地上的一小份数据。有时也用其复数形式 cookies。
session,可以翻译成“会话”,是服务器分配在自己内存或数据库中的一块区域,用于存储登录后的用户信息,和 cookie 结合后可以辨别发来请求的用户身份,解决 HTTP 协议无状态的问题。
在使用 HttpRunner 的时候,要模拟用户的身份向接口发送请求,明白 cookie 和 session 的内容后,就可以从响应信息中提取我们需要的 cookie,继而以特定身份去访问接口(有点类似 LR 中关联的处理方式)。
我们以下图来简要说明,如何通过 cookie 和 session 的结合来进行用户身份的识别。
图中“红色”编号部分处理过程:
在 HTTP 协议中,如果浏览器收到服务器发过来的 Cookie ,则在其向该服务器发送的后续所有请求中,都会自动把这些 Cookie 附带上再发回服务器。
- 浏览器:用户通过浏览器输入用户名和密码,进行登录操作。
- 服务器:后续会为该请求分配一块内存区域(或数据库中),并分配一个该区域对应的唯一编号(即SessionID)。
- 服务器:判断用户名和密码是否正确。
- 服务器:如果用户名和密码正确,将关键用户信息存入上面分配的 Session 区域中。
- 服务器:在响应头域中,将上面的 SessionID 附加到 Cookie 中传回给浏览器。至此浏览器向该服务器发送的所有后续请求都会把这个 Cookie(里面存储着SessionID)附加到请求中一并再传给服务器。
图中“蓝色”编号部分处理过程:
由于 HTTP 协议无状态(即无记忆)的特点,无法从协议本身获知发起请求的人是谁。某用户通过浏览器发送请求,请求中附带着 Cookie 信息,里面存储了SessionID 编号。
- 服务器:收到请求后,根据 SessionID 按图索骥,查看自己是否有这个编号所对应分配的 Session 区域。
- 服务器:如果有这个区域,则到里面看看保存的用户信息,发现 name=Esther 信息。
- 服务器:至此服务器就可以核对到请求发送方的身份了,说明这个发起请求的用户就是 Esther 了。
关于会话(Session)有些注意事项:
- 从打开浏览器访问页面开始,到关闭浏览器结束,这整个过程称之为一次“会话(Session)”。
- 如果中间点击“退出”按钮,退出系统,但没有关闭浏览器,此次会话仍旧存在,SessionID 没有消失。
- 所以退出系统的时候,还必需要清空存储在 Session 中的关键用户信息,否则点击后退按钮就又重新进入系统了。
- 服务器中会设置 Session 的过期时间,如果一段时间没有进行任何操作,此会话会自动失效。
- 有些页面可以关闭 Session 机制,如新闻浏览页面,不需要用户进行登录,就没有必要分配 Session 空间了。
- 关于 SessionID 是保存在浏览器的临时 Cookie 中(即内存中),在浏览器的本地缓存目录是看不到的。
- 另外,浏览器访问登录页面时产生的第一个请求,其响应中就已经返回 cookie:sessionid 了,只是此时 Session 空间内没有记录用户信息(相当于空白状态),只有当用户成功输入用户名和密码登录后,才向 Session 中写入用户关键信息。图中将这个过程整合简化处理了。
- 服务器端 Session 中存储的用户数据不宜过多,毕竟如果存储在内存中,非关键数据的存储会浪费空间。