认识Token和Cookie
认识Token和Cookie
1、token和cookie有什么区别?
1.1 存储位置及方式:Cookie是浏览器用来存储本地信息的文件,有一定的存储限制,而Token是由服务器按一定算法生成的密令,可以由前端指定存放到localStorage、sessionStorage或cookie中。
1.2 功能特性:每次浏览器发起HTTP请求都会自动携带Cookie内容一起发送给服务器,而Token严格来说只是程序员定义的字符串,没有任何自主功能,所以浏览器发起的HTTP请求不会自动携带Token字符串。
1.3 Token相对于Cookie机制的优势在于支持跨域访问,在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息。此外,Token也不依赖于Cookie,所以不需要考虑对CSRF(跨站请求伪造)的防范。
1.4 生命周期:当用户登出后,Cookie会注销,而Token不会,因为是一个字符串,但可以手动增加相关操作去实现这个功能。
2、token和cookie使用场景?
2.1 Token主要用于身份验证和授权。在单页面应用程序(SPA)和Web API中,Token被广泛使用以确保用户身份的安全性和授权的准确性。例如,在用户登录后,服务器通常会生成一个Token并将其发送给客户端。客户端在后续的请求中将该Token发送回服务器,服务器验证Token的有效性并据此授予用户相应的权限。
2.2 Cookies则主要用于跟踪用户状态和提供连续的服务。例如,在购物车功能中,Cookie可以存储用户的购物车信息,以便用户在浏览不同页面时保持商品选择。另外,Cookies还可以用于实现“记住我”功能,即允许用户在登录后无需每次都输入用户名和密码。
3、token和cookie的生命周期
Token的生命周期由服务器设置,一般取决于具体的应用和安全需求。Token在服务器端生成,并发送给客户端。在后续的请求中,客户端将Token发送回服务器,服务器验证Token的有效性并据此授予用户相应的权限。Token的安全性较高,因为它们存储在服务器端,并且通常会设置有效期和访问权限限制。在达到有效期或访问权限被限制时,Token会被服务器端销毁或过期,需要重新生成。
Cookies的生命周期则由浏览器设置,取决于用户的浏览器设置和Cookie的有效期。当用户关闭浏览器时,所有的Cookie通常会被清除。但是,在某些情况下,如“记住我”功能或购物车功能,Cookies可能会被设置为持久化,即浏览器关闭后仍然可以保留一段时间。Cookies的生命周期也可以由服务器设置,通过设置Cookie的maxAge属性来控制其有效期。一旦Cookie过期或被删除,它将不再被浏览器发送到服务器。
需要注意的是,由于Cookie存储在客户端并且可能被拦截或篡改,因此它们的安全性相对较低。在处理敏感信息(如身份验证信息)时,建议使用Token或其他更安全的方式。
4、如何获取cookie?
4.1 python代码
# 通过session对象获取cookie
def get_cookie_api():
session = requests.session()
get_url = 'https://cooperation.uniontech.com/wwwapi/Login/MDAccountLogin'
data = {
"password": "tPH1iyV+/FcFH9neCkjzNnuKSxKOSNU94DGp2r10oZn5YR3Wl+aihum9PBeTeMoPuwU"
"/cFLzQW4IlBLkz5S3DhvwBBmvXg6jxkXwccDp5nMPr2L6PwCNW1soqIEWP1W2ylBAfJi"
"CBeN2K36UXckqWQ63dH5tUi1CwNAcSrGoI5M=",
"isCookie": False,
"captchaType": 1,
"account": "Io9tZtaCE6R4yfpRrLFV6azDjpXKUCjNdjOeIOI32y9bVYHfOUA+iZUXFRKQSvszFN7i0"
"Meyvr5wgurnWy/9fI4/MZn4cIzM+MPUqUcZyqbE82n1i0EaWpl6jpNwBjX7XDOyjSyGhBD"
"m3X2ejKVghWHwgdLqEugi6+rOSTnJiaw="
}
headers = {"content-type": "application/json"}
session.post(url=get_url, json=data, headers=headers)
cookie = session.cookies.get_dict()
for key, values in cookie.items():
cookie = key + "=" + values
return cookie
# 在headers中获取cookies信息
def get_cookies():
url = 'https://xxxxxxx.com/wwwapi/Login/MDAccountLogin'
data = {
"password": "tPH1iyV+/FcFH9neCkjzNnuKSxKOSNU94DGp2r10oZn5YR3Wl+aihum9PBeTeMoPuwU"
"/cFLzQW4IlBLkz5S3DhvwBBmvXg6jxkXwccDp5nMPr2L6PwCNW1soqIEWP1W2ylBAfJi"
"CBeN2K36UXckqWQ63dH5tUi1CwNAcSrGoI5M=",
"isCookie": False,
"captchaType": 1,
"account": "Io9tZtaCE6R4yfpRrLFV6azDjpXKUCjNdjOeIOI32y9bVYHfOUA+iZUXFRKQSvszFN7i0M"
"eyvr5wgurnWy/9fI4/MZn4cIzM+MPUqUcZyqbE82n1i0EaWpl6jpNwBjX7XDOyjSyGhBDm3"
"X2ejKVghWHwgdLqEugi6+rOSTnJiaw="
}
headers = {"content-type": "application/json"}
response = requests.post(url, json=data, verify=True, headers=headers)
# print(response.json())
headers_cookie = response.headers.get('Set-Cookie')
print(headers_cookie)
cookies = headers_cookie.split(';')[3].split(',')[1]
return cookie
4.2 postman_api接口获取

4.3 apifox_api接口获取


浙公网安备 33010602011771号