接口基础知识12:cookie、session和token

​课程大纲

‌Cookie、Session和Token是Web应用中常用的身份验证和会话管理机制,各有特点,适用于不同的应用场景。

一、Cookie

1.1 什么是Cookie

Cookie是存储在客户端浏览器中的小段数据,通常用于存储用户偏好设置或用于跟踪用户活动。

Cookie可以包含用户身份验证的信息,如会话ID,但存储在客户端的Cookie信息可能会被用户清除或被第三方拦截。

优点:易于实现和设置。

缺点:安全性较低,因为数据存储在客户端,容易被篡改或窃取。

1.2 Cookie的组成

(Chrome浏览器查看Cookie)

1.Name:Cookie的名称。

2.Value:对应名称的值。

3.Domain:Cookie的域名。

4.Path:Cookie生效的路径(和Domain组合)。

5.Expires:过期时间,过了这个时间后Cookie失效。3种取值:

        ① 整数数值:秒数,超时后过期。

        ② UTC时间字符串。例如:2024-08-25T04:36:07.006Z。

        (T是一个分隔符,Z代表UTC即世界标准时间,是格林尼治时间时间,即北京时间减8h)

        ③ Session:浏览器会话结束,清除cookie。

        一般用户关闭浏览器窗口或标签页时,cookie将不再存在;而一些浏览器重启时,也会将会话恢复,此时Cookie并不会失效。

6. Max-age:生效时间,表示Cookie在多长时间后失效。(整数数值:秒数,超时后过期。)

7. Size:Cookie的长度,name和value的长度和(字节数)。

(不同浏览器cookie个数和大小的限制)

8.HttpOnly:True/False。只允许http请求访问使用cookie,禁止JavaScript读取或修改Cookie。

9.Secure:True/False。是否只允许加密协议HTTPS协议传输Cookie。

10.SameSite:是否允许跨站请求时发送Cookie。

是否跨域

是否跨站

子域名不同,

如:a.txm.com与b.txm.com

×

端口不同,

如:txm.com:8000与txm.com:9000

×

IP不同(直接使用IP访问网站)

11.Partitioned:第三方Cookie分区。

12.Priority:优先级。

详见参考文章《浏览器中Cookie的全面介绍》:

https://blog.csdn.net/qq278672818/article/details/131753651

1.3 Cookie的传递方式

Cookie通过请求头和响应头传输。

(请求header里的Cookie)

客户端请求头中Cookie格式

Cookie:key1=value1;key2=value2…;key100=value100

服务器响应头设置Cookie

Set-Cookie:`name=value` [; expires=`date`] [; domain=`domain`] [; path=`path`] [; secure] [; httponly] [; samesite=`strict`/`lax`/`none`]

二、Session

2.1 什么是‌Session

‌Session是服务器端用来跟踪用户会话状态的一种机制。

用户首次访问网站时,服务器会创建一个唯一的会话标识(session ID),并将其存储在用户的Cookie中。服务器通过这个会话标识来识别用户,并保持用户的会话状态。

优点:安全性较高,因为会话数据存储在服务器端,不易被篡改或窃取。

缺点:

① 访问用户多时,可能会造成服务器压力;

② 如果网站架构涉及多个服务器,需要解决Session共享的问题,增加实现的复杂性和成本。

2.2 ‌Session的传递方式

① 使用服务器端的session对象:将要传递的值存储在服务器端的session对象中,然后在不同的页面中读取该session对象获取传递的值。

② 使用URL参数:将要传递的值作为URL的参数传递给下一个页面,下一个页面可以通过获取URL参数来获取传递的值。

③ 使用表单或链接:将要传递的值放在表单的隐藏字段中或者作为链接的参数,在提交表单或点击链接时将值传递给下一个页面。

举例:写一个隐藏的输入框,用户无法看到。

<form id="hiddenForm" action="your-server-endpoint" method="post" style="display: none;"><input type="text" name="username" /><input type="password" name="password" /> <input type="hidden" name="csrf_token" value="your_csrf_token" /></form>

④ 使用cookie:将要传递的值存储在cookie中,在下一个页面读取cookie获取传递的值。

举例:

Cookie: session_id=txm001;user=tuxiaomao

三、Token

3.1 什么是‌Token

Token是一种认证令牌,通常是一小段加密字符串,可以存储在Cookie中或直接作为HTTP请求头的一部分发送。

Token的认证方式类似于临时的证书签名,是一种服务端无状态的认证方式,服务端不会保存与用户相关的任何状态信息,每次请求时只需验证Token的有效性。

优点:安全性较高,因为Token不会被浏览器自动发送到不安全的域,且可以通过加密算法确保其不可伪造性。

缺点:如果Token被泄露,可能会导致安全问题。

3.2 ‌Token的传输方式

① 存储在Cookie中或直接发送。

格式:

Cookie:token=Basic [编码后的字符串]

Cookie:token=Bearer [编码后的字符串]

举例:

Cookie:token=Basic dHV4aWFvbWExMjM0NTY=

② HTTP请求头的一部分发送(使用Authorization字段

格式:

Authorization:Basic [编码后的字符串]

Authorization:Bearer [编码后的字符串]

举例:

Authorization: Bearer sfakgnkasnfdaoie=

3.3 Basic token和Bearer token

Basic token和Bearer token是两种不同的身份验证方式。 

Basic token:用户名和密码使用base64编码后,加前缀“Basic [token字符串]”(注意有空格)。

举例:tuxiaomao123456经过base64编码后,如下。

Authorization:Basic dHV4aWFvbWExMjM0NTY=

Bearer token:调用登录接口,发送用户名密码登录成功,服务器随机返回一个自定义的加密token字符串,客户端接收后,使用该token进行后续请求。

对比项

Basic token

Bearer token

token生成端

客户端

服务器

生成方式

用户名+密码Base64编码。

登录接口,服务器创建并返回。

加密方式

Base64编码(通用编码)

系统自定义加密方式

安全性

低(易破解)

时效性

有,过期失效(如2h)

token特点

只要用户名密码不变,token固定不变。

token不固定,每次登录返回新token,过期失效需重新登录获取。

总结

Cookie适用于简单的身份验证和跟踪用户活动,但安全性较低;

Session提供了较高的安全性,通过服务器端管理会话状态,但需要解决跨服务器会话共享的问题;

Token则提供了较高的安全性,适用于REST API等无状态服务,但需要注意Token的管理和安全性问题。‌

参考文章:

1、《浏览器中Cookie的全面介绍》

https://blog.csdn.net/qq278672818/article/details/131753651

2、《session跨页面传值的方法是什么》

https://www.yisu.com/ask/56108246.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土小帽软件测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值