cookie和token的五点区别

本文对比了Token和Cookie在身份验证中的使用方式。Token由应用管理,可在无状态服务器上使用,扩展性强,适用于移动端;而Cookie依赖于服务器会话,安全性较低。Token的优势在于其可避免CSRF攻击,并能轻松在多个服务间共享。

①:token和cookie一样都是首次登陆时,由服务器下发,都是当交互时进行验证的功能,作用都是为无状态的HTTP提供的持久机制。

②:token存在哪儿都行,localstorage或者cookie。

③:token和cookie举例,token就是说你告诉我你是谁就可以。

cookie 举例:服务员看你的身份证,给你一个编号,以后,进行任何操作,都出示编号后服务员去看查你是谁。
token  举例:直接给服务员看自己身份证

④:对于token而言,服务器不需要去查看你是谁,不需要保存你的会话。当用户logout的时候cookie和服务器的session都会注销;但是当logout时候token只是注销浏览器信息,不查库。

⑤:token优势在于,token由于服务器端不存储会话,所以可扩展性强,token还可用于APP中。

总结:

Token 完全由应用管理,所以它可以避开同源策略
Token 可以避免 CSRF 攻击
Token 可以是无状态的,可以在多个服务间共享

如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口,用 Token,如果之上自己的那就无所谓了。 
### Session、Cookie Token区别与比较 在 Web 开发中,Session、Cookie Token 是用于处理身份认证状态管理的关键机制。它们各自有不同的应用场景、实现方式特点。 #### 存储位置与安全性 - **Cookie** 存储在客户端(通常是浏览器),主要用于存储用户偏好、会话标识符以及跟踪用户行为等。由于 Cookie 在每次 HTTP 请求时都会被发送到服务器,因此需要特别注意其安全性设置,例如使用 `HttpOnly` `Secure` 标志来防止 XSS 中间人攻击 [^1]。 - **Session** 信息存储在服务器端,通常通过一个唯一的 Session ID 来标识用户的会话状态。Session ID 一般通过 Cookie 存储在客户端,但实际的会话数据保留在服务器上,这使得 Session 相对更安全,因为敏感信息不会暴露给客户端 。 - **Token**(如 JWT)通常存储在客户端,可以是 Cookie、LocalStorage 或其他客户端存储方式。Token 是自包含的,携带了用户信息签名,服务器通过验证签名来确认 Token 的有效性。这种机制使得 Token 具有较高的安全性,并且适合在分布式系统中使用 [^1]。 #### 跨域能力 - **Cookie** 的跨域能力受限,通常只能在同一个域名下传递,除非使用特定的配置(如 CORS)来允许跨域请求 [^2]。 - **Session** 完全依赖于服务器,并且与特定的域名绑定,因此不支持跨域认证 。 - **Token** 天然支持跨域认证,因为 Token 可以通过 HTTP 头部或其他方式传递,适用于构建分布式微服务架构 。 #### 性能考虑 - 使用 **Token** 可以减少服务器存储会话状态的需求,从而提高性能扩展性。服务器不需要维护会话的状态,只需要验证 Token 的有效性即可 。 - **Session** 需要服务器为每个用户维护会话数据,这可能会增加服务器的内存消耗,尤其是在用户数量庞大的情况下 。 - **Cookie** 的容量较小,每个 Cookie 约为 4KB,因此不适合存储大量数据 [^1]。 #### 用途实现机制 - **Cookie** 通常用于客户端存储少量数据,例如用户的偏好设置或会话标识符 。 - **Session** 用于在服务器端保持用户状态,例如用户的登录状态或购物车内容 [^1]。 - **Token** 主要用于身份验证跨服务的信息传递,特别是在需要无状态高扩展性的场景中 。 #### 示例代码 以下是一个简单的 Python 示例,展示了如何使用 Flask 框架来处理 Cookie Session: ```python from flask import Flask, request, session, make_response app = Flask(__name__) app.secret_key = 'your_secret_key' @app.route('/set_cookie') def set_cookie(): resp = make_response("Cookie set") resp.set_cookie('user', 'JohnDoe') return resp @app.route('/get_cookie') def get_cookie(): user = request.cookies.get('user') return f"User from cookie: {user}" @app.route('/set_session') def set_session(): session['user'] = 'JohnDoe' return "Session set" @app.route('/get_session') def get_session(): user = session.get('user') return f"User from session: {user}" if __name__ == '__main__': app.run(debug=True) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值