细说会话三剑客: Cookie、Session和Token

0. 必要性论证

image-20240421174856351

在日常的开发中,不管是前端或者后端领域,都绕不开用户状态和会话的管理方面的内容。因此有必要理解清楚三种技术的基本原理和使用场景以及三者之间的区别,当然,在面试过程中,这也是一个很常见的基本面试题。

1. Cookie

在Web开发中,Cookie是一种存储在用户计算机上的小型文本文件,用于跟踪用户在网站上的活动和存储有关用户的信息。Cookie通常由服务器发送给用户的浏览器,并保存在用户的计算机上,每当用户访问相同的网站时,浏览器会将Cookie发送回服务器,以便服务器识别用户并提供个性化的体验。

Cookie的一些关键特点和详细定义:

  1. 存储位置:Cookie是存储在用户计算机上的文本文件,通常存储在浏览器的Cookie文件夹中。

  2. 数据格式:Cookie以键值对的形式存储数据,例如:cookie_name=value。一个网站可以在用户的浏览器中设置多个Cookie,每个Cookie都有一个唯一的名称。

  3. 作用

    • 会话管理:用于跟踪用户的会话状态,保持用户登录状态等
    • 个性化体验:存储用户的偏好设置、购物车内容、广告偏好等,以提供个性化的体验,这一点应该很常见,现在大部分站点都设置了个性化的服务,根据每个用户不同的需求进行定制化,达到最佳的用户体验。
    • 跟踪分析:用于分析用户行为、流量统计等。
  4. 过期时间:Cookie可以设置过期时间,可以是会话级的(浏览器关闭后失效)或持久性的(在一定时间内有效)。

  5. 安全性:由于Cookie存储在用户的计算机上,可能存在安全风险,如Cookie劫持。因此,对于包含敏感信息的Cookie,应当采取加密等安全措施。

  6. 同源策略:Cookie受同源策略的限制,只能被设置和访问与设置它的域名相同的页面。

  7. 使用场景

    • 记住用户的登录状态,以免用户每次访问都需要重新登录。
    • 存储用户的偏好设置,如语言偏好、主题选择等。
    • 跟踪用户行为,用于广告定位、网站分析等。

一句话总结:

Cookie是一种存储与用户浏览器端的键值对形式的文本,主要用来作用户的会话管理,个性化体验等,且cookie是有状态的。

image-20240421175408388


2. Session

Session是指在网络通信中,服务器与客户端之间建立的一种持续性的连接。在Web开发中,Session通常用于跟踪用户在网站上的活动状态,并在用户访问不同页面时保持用户的身份认证信息和其他相关数据。

以下是关于Session的一些重要概念和含义:

  1. 会话状态:Session用于存储特定用户在特定时间段内的会话状态信息。这可以包括用户的登录状态、购物车内容、用户首选项等。

  2. 唯一标识符:每个Session都有一个唯一的标识符,通常存储在Cookie中或通过URL参数传递给客户端,用于识别特定用户的Session。

  3. 服务器端存储:Session数据通常存储在服务器端,可以存储在内存中、数据库中或文件系统中,以确保数据的安全性和一致性。

  4. 过期时间:Session可以设置过期时间,一旦用户一段时间内没有活动,Session数据可能会被清除,用户需要重新登录或重新开始会话。

  5. 安全性:Session数据通常被视为敏感信息,因此需要采取安全措施,如加密传输、防止Session劫持等。

在Web开发中,Session常用于以下方面:

  • 用户认证:通过Session跟踪用户的登录状态,以便在用户访问受限页面时进行身份验证。

  • 购物车管理:在电子商务网站中使用Session来存储用户的购物车内容,以便用户在浏览和结账过程中保持购物车状态。

  • 个性化体验:根据用户的Session数据提供个性化的内容和功能。

一句话总结

Session是一种在服务器端存储用户会话状态信息的机制,用于跟踪用户在网站上的活动和维持用户状态。


3. Token

在计算机科学和网络安全领域,Token是一个用于表示身份验证信息或访问权限的令牌。Token通常是一个字符串,可以是随机生成的,具有一定的时效性和唯一性,用于验证用户身份或授权用户访问特定资源。

以下是关于Token的一些重要含义和用途:

  1. 身份验证:在身份验证过程中,用户通常会提供用户名和密码,服务器验证这些凭证后会颁发一个Token给用户,用于后续的请求认证。

  2. 访问控制:Token还可以用于授权用户访问特定资源或执行特定操作。通过检查Token的有效性和权限,服务器可以决定是否允许用户进行请求操作。

  3. 无状态性:Token可以使系统保持无状态性,因为Token本身包含了所有必要的信息,服务器不需要在本地存储用户的会话状态。

  4. 安全性:Token应当具有一定的安全性,例如使用加密算法生成,避免被篡改或伪造。此外,Token通常会设置过期时间,以减少安全风险。

  5. 类型:常见的Token类型包括JWT(JSON Web Token)、OAuth Token、Bearer Token等,每种类型的Token有不同的用途和特性。

在Web开发中,Token经常用于以下方面:

  • 用户认证:用户登录后服务器颁发Token,用户在每次请求时携带Token用于身份验证。

  • API访问:在使用API进行通信时,Token可以用于授权用户访问API的特定端点或资源。

  • 单点登录:Token可以用于实现单点登录(Single Sign-On),让用户在多个应用间无需重复登录。

一句话总结

Token是一种用于身份验证和授权的令牌,通常由服务器颁发给客户端,客户端在后续请求中携带该令牌以验证身份和访问权限。


4. Cookie和Session的区别

主要区别如下:

  • 存储位置不同
    • cookie存储在浏览器端
    • session存储在服务端(会返回客户端一个Session ID)
  • 存储大小不同
    • cookie可以存储的数据量较少
    • session 可以存储更多的数据
  • 安全性不同
    • Cookie:容易受到跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等安全威胁。
    • Session:相对于Cookie更安全,因为Session数据存储在服务器端,客户端只有一个Session ID。

5. Session和Token的区别

主要区别如下:

  • 存储位置区别
    • Session存储在服务器端
    • Token则是由服务端颁发存在于客户端
  • 生命周期
    • Session通常在用户会话期间保持活动状态,会话结束后销毁
    • Token则相对有更长的生命周期,可以持续用于身份验证和授权;
  • 验证方式
    • Session服务器通过SessionID验证
    • Token则是通过签名等机制进行;
  • 使用场景:
    • Session 适用于传统Web应用程序
    • Token适用于分布式系统,前后端分离等项目中

6. Cookie和Token的区别

主要区别:

  • 定义不同
    • Cookie:是服务器发送到用户浏览器并保存在用户本地计算机上的小型文本文件,用于存储用户的会话信息、偏好设置等。
    • Token:是一种用于身份验证和授权的令牌,通常由服务器生成并发送给客户端,客户端在后续请求中使用Token来验证身份和访问权限。
  • 内容信息
    • Cookie:包含有关用户会话、偏好设置、跟踪信息等数据。
    • Token:通常包含有关用户身份、权限、过期时间等信息。
  • 安全性
    • Cookie:存在一些安全风险,如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。
    • Token:可以通过加密和签名等技术增强安全性,有效防止CSRF攻击,并且可以更安全地传输和存储。
  • 用途区别
    • Cookie:用于存储用户会话信息、跟踪用户活动、保持用户登录状态等。
    • Token:用于身份验证和授权,通常用于API访问、单点登录等场景。

以上就是三种技术的定义和区别,其中Token的实现原理相对复杂,后续会独立一篇文章出来。

相关推荐

  1. Linux 文本处理剑客:grep、sed awk

    2024-04-22 20:56:02       42 阅读
  2. Linux剑客指令正则表达式

    2024-04-22 20:56:02       39 阅读
  3. Linux文本处理剑客:awk、grepsed

    2024-04-22 20:56:02       41 阅读
  4. susudu、剑客中的sed、awk命令

    2024-04-22 20:56:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 20:56:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 20:56:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 20:56:02       87 阅读
  4. Python语言-面向对象

    2024-04-22 20:56:02       96 阅读

热门阅读

  1. opencv的高斯滤波函数

    2024-04-22 20:56:02       38 阅读
  2. 4.15 day6 ARM

    2024-04-22 20:56:02       41 阅读
  3. pytorch 多进程数据加载 - 序列化数据/serialize_data

    2024-04-22 20:56:02       32 阅读