Cookie、Session、Token区别
专题简介
- cookie
- session
- token
- 三个的区别
Cookie
什么是Cookie
Cookie
是客户端保存用户信息的一种机制,用于在客户端(通常是浏览器)和服务器之间存储和传递数据。它通过在客户端的浏览器中存储一小段文本数据,来实现在用户多次请求中保持状态的功能。用来记录用户的一些信息,也是实现Session的一种方式。
Cookie的实现步骤也就是(机制)
- 客户端发送一个请求到服务器
- 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部
- 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部
- 服务器返回响应数据。
Cookie的属性
- Expires:设置Cookie的有效期
- 修改或者删除Cookie:HttpServletResponse提供的Cookie操作只有一个addCookie(Cookie cookie)修改Cookie只能创建一个同名的Cookie覆盖,删除Cookie只能创建一个同名的Cookie有效期设置为0
- Cookie的域名:设置Cooke的domain参数为顶级域名来达到二级域名共享cookie
- Cookie的路径: path属性决定允许访问Cookie的路径。比如,设置为"/"表示允许所有路径都可以使用Cookie
Cookie的作用
- 身份验证:保存用户登录状态,实现持久登录。
- 会话管理:追踪用户的会话信息,例如购物车内容。
- 个性化设置:存储用户偏好设置,以提供个性化的用户体验。
Session
什么是seeion
Session
(会话)是一种在服务器端存储用户状态和数据的机制。它通过在服务器端创建一个唯一的会话标识(通常是一个 Session ID
),并将该标识发送给客户端,实现在不同的请求中跟踪和管理用户的状态。
session实现步骤
- 服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机
- 客户机的浏览器去访问服务器时,通过cookie的形式携带session ID
- 服务器识别session id的有效性,然后进行交互
session作用
- 身份验证:存储用户登录信息和权限,实现用户认证。
- 会话管理:追踪用户的操作和活动,在请求之间保持连续性。
- 数据存储:存储用户数据,例如购物车、表单数据等。
Token
什么是Token
token常被人称为令牌,它主要是为了解决服务器的ssession的id存储量过大而产生的,存储在服务器端,客户端发送请求都会携带token,然后服务器可以token进行解码操作,判断该用户是不是已经登录或者注册了网站.
Token实现步骤
- 客户端向服务器发送身份验证请求,通常是提供用户名和密码。
- 服务器验证客户端提供的身份信息,并生成一个
Token
。 - 服务器将生成的
Token
发送给客户端,客户端将其保存。 - 客户端在以后的请求中将
Token
添加到请求头中,作为身份凭证。 - 服务器在接收到请求时,验证
Token
的有效性和权限,并相应地处理请求。
Token 的作用
- 身份验证:通过 Token 来验证客户端的身份,替代传统的基于会话的身份验证机制,不需要在服务器端存储会话信息,减轻服务器的负担。
- 授权:服务器可以根据 Token 中的信息来判断客户端的权限,决定是否允许相应的操作。
- 单点登录(SSO):Token 可以在不同的应用程序之间共享,实现用户的单点登录功能。
区别和联系
联系
- Cookie、Session 和 Token 是用于在 Web 应用程序中处理用户身份验证和状态管理的不同机制
- sessionID是通过Cookie去传输的
区别
- 存储位置:Cookie和Token是存储在客户端浏览器的,Session是存储在服务器
- 安全性:
- Cookie:容易受到劫持和篡改的风险。
- Session:数据存储在服务器端,相对较安全。但仍然需要防止会话劫持攻击等安全问题。
- Token:需要建立安全的传输通道和存储机制,确保传输中的数据安全性。
- 实现复杂性:Cookie单易用,浏览器自动处理cookie的创建存储和发送,session是在服务端处理,Token可以在服务器端或客户端自行实现
- 传递数据量大小:Cookie限制是4KB左右,数据不大,Session可以存储大量的数据,Token一般包含身份验证和授权,数据量比较小
- 跨域问题:Cookie受跨域的限制,Seeion的传输是通过Cookie实现的也需要处理跨域问题,Token是通过请求头携带参数的,不受跨域的限制
- Cookie和Token都是无状态的,session是有会话状态