Cookie简介
简介:工程师 针对 http协议是无连接、无状态特性,设计的一种技术。 可以在浏览器端存储用户的信息。
特性:
- cookie 用于存储 用户临时的不敏感信息。
- cookie 位于浏览器(客户端)端。默认大小 4k(可以调整)
- cookie 中的数据,可以随意被访问,没有安全性可言。
- cookie 中存储的数据类型, 受浏览器限制。
Session简介
简介:也叫会话。通常出现在网络通信中,从客户端借助访问终端登录上服务器,直到退出登录所产生的通信数据,保存在会话中。
特性:
- Session 用于存储 用户的信息。
- Session 位于服务端。大小直接使用服务器存储空间
- Session 中的数据,不能随意被访问,安全性较高。
- Session 中存储的数据类型,受服务器影响,几乎能支持所有的数据类型。
Cookie+Session认证方式
在计算机中,认证用户身份的方式有多种!
第一种:token认证。(常用于接口,身份令牌)
第二种:cookie+Session认证。(常用于登录认证)
1.实现原理
![图片[1] - cookie,session与token的区别 - 正则时光](https://www.regular.cc/wp-content/uploads/2023/11/2022082715294874-1024x532.png)
1、客户端第一次访问服务器时,在服务器生成一个session的键值对信息。session-id(key)和session-对象(value)
在服务器返回响应时,携带上session-id,存放在客户端本地的cookie中。
2、在客户端发起登录时,带上cookie(里面存放的有session-id信息)。当登录成功后,在session-id对应的session-对象中存放此用户的user-id
3、在之后的访问中,每次都携带上session-id,去检查session-id的session-对象中,是否有user-id。如果有代表已经登录成功,直接显示登录后的页面。如果没有,说明没有登录,显示登录页面
2.cookie身份认证案例
import requests
# 发送获取验证码请求
resp_v = requests.get(url="http://tpshop-test.itheima.net/index.php? m=Home&c=User&a=verify&r=0.21519623710645064")
# 从获取验证码的响应结果,提取cookie
my_cookie = resp_v.cookies
# 发送登录请求url、请求头、请求体。 携带 cookie。 得响应结果
resp = requests.post(url="http://tpshop-test.itheima.net/index.php? m=Home&c=User&a=do_login&t=0.7094195931397276",
# headers={"Content-Type": "application/x-www-form-urlencoded"}, 可以不写,data或json已经指明了请求体格式
data={"username": "13012345678", "password": "12345678", "verify_code": "8888"}, cookies=my_cookie)
# 打印响应结果
print(resp.json())
# 发送查看我的订单请求
resp_o = requests.get(url="http://tpshop-test.itheima.net/Home/Order/order_list.html", cookies=my_cookie)
3.缺点
cookie+session 是实现认证的一种非常好的方式,但是凡事都有两面性,它们实现的认证主要有以下缺点:
- 增加请求体积,浪费性能,因为每次请求都会携带 cookie。
- 增加服务端资源消耗,因为每个客户端连接进来都需要生成 session,会占用服务端资源的。
- 容易遭受 CSRF 攻击,即跨站域请求伪造。
那么为了避免这些缺点,token 方式的鉴权出现了,它可以说是一个民间的认证方式,但是不得不说它带来了非常多的好处。
Token简介
先看下面两个token身份令牌。应该就能有个理解
![图片[2] - cookie,session与token的区别 - 正则时光](https://www.regular.cc/wp-content/uploads/2023/11/2022082715463650-1024x122.png)
![图片[3] - cookie,session与token的区别 - 正则时光](https://www.regular.cc/wp-content/uploads/2023/11/2022082715451954.png)
token 其实就是一串字符串而已,只不过它是被加密后的字符串,它通常使用 uid(用户唯一标识)、时间戳、签名以及一些其它参数加密而成。我们将 token 进行解密就可以拿到诸如 uid 这类的信息,然后通过 uid 来进行接下来的鉴权操作。
![图片[4] - cookie,session与token的区别 - 正则时光](https://www.regular.cc/wp-content/uploads/2023/11/2022082715534828.png)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END