Cookie Seesion Token
Session
Session 的主要作用就是通过服务端记录用户的状态(通过 Cookie 中附加一个 Session ID 的方式来跟踪)
基本概念
Cookie 是一种在客户端存储数据的技术,它是由服务器发送给客户端的小型文本文件,存储在客户端的浏览器中,大小大概 4KB。在客户端发送请求时,浏览器会自动将相应的 Cookie 信息发送给服务器,服务器通过读取 Cookie 信息,就可以判断该请求来自哪个客户端。
cookie 中通常存储的数据:用户登录信息;用户行为等
- 身份验证令牌
- 用户首选项:语言选择、主题偏好
- 跟踪用户行为:页面浏览历史、购物车内容
- 会话信息:处理会话级别的数据,如保存用户在填写表单时的临时信息。
Cookie 的实现用户确定或者权限确定的流程
1、客户端发送请求到服务器
2、服务器收到请求后生成一个 session 会话
3、服务端响应客户端,并在响应头中设置 Set-Cookie。Set-Cookie 里面包含了 sessionId,它的格式 Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]。其中 sessionId 就是用来标志客户端的。
4、客户端收到该请求后,如果服务器给了 Set-Cookie,那么下次浏览器就会在请求头中自动携带 cookie
5、客户端发送其它请求,自动携带了 cookie,cookie 中携带有用户携带 cookie
6、服务端接收到请求,验证 cookie 信息。例如通过 sessionId 来判断是否存在会话,存在则正常响应。
cookie 主要特点
- cookie 存储在客户端
- cookie 不可跨域,但是如果设置了 domain,那么它们是可以在一级域名和二级域名之间共享的。
Cookie 被禁用怎么办
最常用的方法就是利用 URL 重写把 Session ID 直接附加在 URL 路径的后面
Session
基本概念
session 由服务端创建,当一个请求发送到服务端时,服务器会检索该请求里面有没有包含 sessionId 标识,包含则代表服务端已经和客户端创建过 session,然后就可以通过这个sessionId 查找对应的 session;没有找到的话就会为和客户端创建一个新的session,并生成一个新的与之对应的 sessionId,在响应时将 sessionId 给客户端,通常是存储在 cookie 中。
每一个客户端与服务端连接,服务端都会为该客户端创建一个 session,并将其唯一标识 sessionId 通过设置 Set-Cookie 头的方式相应给客户端,客户端将其存到 cookie 中。
session 与 Cookie 的实现用户确定或者权限确定的流程
通常情况,cookie 与 session 结合使用,也可以分别单独使用,这里是结合的流程:
1、客户端发送请求
2、服务端收到请求后,创建一个 session,并将 session 的唯一标识 sessionId 设置在 Set-Cookie 响应头中,相应给客户端
3、客户端收到响应后。发送其他请求会自动携带 cookie,服务端通过 sessionId 找到 session,没找到则重新创建 session
4、服务端 cookie 验证通过正常响应请求
session 和 cookie 的区别与联系
联系:cookie 和 session,它们两者之间主要是通过 sessionId 关联起来的;session 基于 cookie 实现的
区别:
- session 比 cookie 更加安全,因为 session 存在于服务端,cookie 存在于客户端
- cookie 只支持存储字符串数据,session 可以存储任意数据
- cookie 有效期可以设置较长时间,session 有效期都比较短
- session 存储空间很大,cookie 有限制
所以一般建议一起使用噢!!!
token
基本概念
Token 是一个由一串字符组成的令牌,用于在计算机系统中进行身份验证和授权;是一种在客户端和服务端之间传递身份信息的方式。当用户登录成功后,服务端会生成一个 Token,将其发送给客户端。客户端在后续请求中,就可以确定该请求来自哪个用户,并且可以根据用户的权限进行相应的操作。
Token 的组成
- 标头 Header:包含了算法和类型,用于指定如何对有效载荷进行编码和签名。采用算法SHA、HMAC、RSA等。
- 有效载荷 Payload:包含一些用于验证身份和授权,如身份ID、角色、权限等。有效载荷可以是加密的,也可以是明文的
- 签名 Signature:是对标头和有效载荷进行签名后得到的值,用于验证 token 的完整性和真实性。签名通常使用私钥进行签名,并使用公钥进行验证。
Token 认证流程
- 客户端发起请求
- 服务端校验用户名和密码后,将用户ID 和一些其它信息进行加密,生成 token,然后服务端将 token 响应给客户端
- 客户端收到响应后将 Token 存储下来,下一次发送请求后需要将 token 携带上
- 服务端收到 token 后校验,校验通过则正常返回数据
优势:
Token 有效避免了 Cookie 的一些安全问题。如 CSRF 攻击。
对比
总结:session 是空间换时间,token 是时间换空间
本文参考 by 知乎https://zhuanlan.zhihu.com/p/631349844