文章目录
- 一、Cookie
- 1.1 Cookie简介
- 1.2 Cookie+Session认证方式
- 1.3 案例 - 看演示,此代码不需实现
- 二、Session
- 2.1 Session简介
- 2.2 Session自动管理Cookie
- 2.3 创建Session对象
- 2.4 案例-重点
- 三、面试题 Cookie 和 Session 区别
一、Cookie
1.1 Cookie简介
- cookie 是工程师,针对 http协议 是无状态这一特征,设计的一种技术。
- cookie 将数据保存在浏览器端。默认存储空间大小为 4k(可以修改)。
- cookie 中的数据,用户和随意获取,没有安全性可言。
- cookie 中存放的数据类型,受浏览器限制。
- cookie 中大多存放于网络通信相关的不敏感数据信息。提高访问速度。如:用户名、登录状态等。
1.2 Cookie+Session认证方式
校验用户身份的方法不同:
- ①令牌校验 —>比如:ihrm项目
- ②cookie+session —>比如:tpshop商城
1、客户端第一次访问服务器-发送http请求。
2、服务器产生session_id (key),session_对象(value),并且回发http相应(携带session_id )。
3、客户端的cookie 存储服务器回发的session_id。
1.3 案例 - 看演示,此代码不需实现
完整实现 TPshop商城登录,并获取 “我的订单” 页面数据。
获取验证码:http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify
登录:http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login
我的订单:http://tpshop-test.itheima.net/Home/Order/order_list.html
# 导包importrequests# 发送 获取验证码请求 - getresp=requests.get(url="http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify&r=0.8163589828918973")# 获取 cookiemy_cookie=resp.cookies# 发送 登录请求 - post,要携带获取到的 cookie, 获取响应结果resp2=requests.post(url="http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login&t=0.06754297110809726",data={"username":"13812345678","password":"123456","verify_code":"8888"},cookies=my_cookie)# 打印响应结果print("登录结果:",resp2.json())# 发送请求,访问 "我的订单" 页面resp3=requests.get(url="http://tpshop-test.itheima.net/Home/Order/order_list.html",cookies=my_cookie)print("我的订单页面:",resp3.text)二、Session
2.1 Session简介
概念:也叫 会话!从客户端登录服务器开始,直到客户端退出登录,所产生的所有通信数据,保存在 session中。
- session 将数据存在服务器端
- session 使用服务器存储空间,没有大小限制。
- session 支持的数据类型,受服务器主机影响。几乎支持所有数据类型。
- session 中的数据,大都采用 加密、转码存储。安全性较高。
2.2 Session自动管理Cookie
结论:Session自动管理Cookie
因为,cookie中的数据,都是由 session 提供的。
2.3 创建Session对象
# 创建session对象:session=requests.Session()说明:
- Session对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。
- 会话能让我们在跨请求时候保持某些参数,比如在同一个session 实例发出的所有请求之间保持cookie。
2.4 案例-重点
借助 session 重新实现 上述 TPshop商城登录,并获取 “我的订单” 页面数据。
实现步骤:
1、创建 session 对象(实例)。 my_session = requests.Session()【注意:() 不能丢!!!】
2、使用 session实例,调用get方法,发送 获取验证码请求(不需要提取cookie)。 my_session.get()
resp = requests.get() # 需要自己提取Cookie,然后把提取到的Cookie在下一次登录请求的时候发过去 Session能够自动管理Cookie,用Session做不需要提取Cookie3、使用同一个 session实例,调用post方法,发送登录请求(不需要携带cookie)。my_session.post()
4、使用同一个 session实例,调用get方法,发送查看我的订单页面请求(不需要携带cookie)。my_session.get()
# 导包importrequests# 1. 创建session实例my_session=requests.Session()# 2. 使用session实例,调用 get方法,发送 获取验证码请求resp1=my_session.get(url="http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify")# print(resp1.text)# 3. 使用同一个session实例,调用 post方法,发送 登录请求。(正确 用户名、密码)resp2=my_session.post(url="http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login",data={"username":"13812345678","password":"123456","verify_code":"8888"})print("登录结果:",resp2.json())# 4. 使用同一个session实例,调用 get方法,查询我的定义页面。resp3=my_session.get(url="http://tpshop-test.itheima.net/Home/Order/order_list.html")# 5. 打印响应结果print("我的订单页面:",resp3.text)三、面试题 Cookie 和 Session 区别
1、数据存储位置:
- Cookie 存储在 浏览器端
- Session 存储在 服务器端
2、安全性:
- Cookie 直接存储在浏览器,可以任意获取,没有安全性可言。
- Session 存储在 服务器端,采用 加密、转码形式存储数据,安全性较高。
3、数据类型:
- Cookie 直接存储在浏览器,支持测试数据类型受浏览器限制
- Session 存储在 服务器端,服务器就是一台主机。因此几乎支持所有的数据类型。
4、大小:
- Cookie 默认大小 4k(可调)
- Session 直接使用服务器存储。没有大小限制。