cookie,session与token的区别

Cookie简介

简介:工程师 针对 http协议是无连接、无状态特性,设计的一种技术。 可以在浏览器端存储用户的信息。

特性:

  • cookie 用于存储 用户临时的不敏感信息。
  • cookie 位于浏览器(客户端)端。默认大小 4k(可以调整)
  • cookie 中的数据,可以随意被访问,没有安全性可言。
  • cookie 中存储的数据类型, 受浏览器限制。

Session简介

简介:也叫会话。通常出现在网络通信中,从客户端借助访问终端登录上服务器,直到退出登录所产生的通信数据,保存在会话中。

特性:

  • Session 用于存储 用户的信息。
  • Session 位于服务端。大小直接使用服务器存储空间
  • Session 中的数据,不能随意被访问,安全性较高。
  • Session 中存储的数据类型,受服务器影响,几乎能支持所有的数据类型。

Cookie+Session认证方式

在计算机中,认证用户身份的方式有多种!

第一种:token认证。(常用于接口,身份令牌)

第二种:cookie+Session认证。(常用于登录认证)

1.实现原理

图片[1] - cookie,session与token的区别 - 正则时光
cookie与session的关系

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的区别 - 正则时光
图片[3] - cookie,session与token的区别 - 正则时光

token 其实就是一串字符串而已,只不过它是被加密后的字符串,它通常使用 uid(用户唯一标识)、时间戳、签名以及一些其它参数加密而成。我们将 token 进行解密就可以拿到诸如 uid 这类的信息,然后通过 uid 来进行接下来的鉴权操作。

图片[4] - cookie,session与token的区别 - 正则时光
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享