Cookie 和 Session 区别——2023最新面试精简版本

news2024/10/5 19:18:55

Cookie 和 Session 的区别

原理:从”登录“过程看Jwt和Token,以及区分Cookie和Session概念

面试:

        好的,面试官。 我先解释一下 Cookie,它是客户端浏览器用来保存服务端数据的一种机制。 当通过浏览器进行网页访问的时候,服务器可以把某一些状态数据以  key-value  的方式 写入到 Cookie 里面存储到客户端浏览器。 然后客户端下一次再访问服务器的时候,就可以携带这些状态数据发送到服务器端,服务端可以根据 Cookie 里面携带的内容来识别使用者。 Session 表示一个会话,它是属于服务器端的容器对象,默认情况下,针对每一个浏览器的请求。 Servlet 容器都会分配一个 Session。 Session 本质上是一个 ConcurrentHashMap,可以存储当前会话产生的一些状态数据。  我们都知道,Http 协议本身是一个无状态协议,也就是服务器并不知道客户端发送过 来的多次请求是属于同一个用户。 所以 Session 是用来弥补 Http 无状态的不足,简单来说,服务器端可以利用 session 来存储客户端在同一个会话里面的多次 请求记录。 基于服务端的 session 存储机制,再结合客户端的 Cookie 机制,就可以实现有状态的 Http 协议。

         客户端第一次访问服务端的时候,服务端会针对这次请求创建一个会话,并生成一个唯一的 sessionId 来标注这个会话。 然后服务端把这个 sessionid 写入到客户端浏览器的 cookie 里面,用来实现客户端状 态的保存。 在后续的请求里面,每次都会携带 sessionid,服务器端就可以根据这个 sessionid 来 识别当前的会话状态。

         所以,总的来说,Cookie 是客户端的存储机制,Session 是服务端的存储机制。 这两者结合使用来实现会话状态的存储,以上就是我对这个问题的理解。

拓展:那请你再说一下token ,cookie和session的区别

  1. 令牌(Token):

    令牌是一种用于身份验证和授权的凭证,通常以字符串的形式存在。在客户端进行身份验证后,服务器会颁发一个令牌给客户端,用于标识和验证客户端的身份。令牌通常包含有关用户身份、权限和有效期等信息,并且被存储在客户端的内存或存储介质中。在每次请求中,客户端需要将令牌包含在请求头或请求参数中发送给服务器,以便进行身份验证和授权。
  2. Cookie:

    Cookie 是一种存储在客户端(通常是浏览器)上的小型文本文件。服务器可以通过 HTTP 响应中的 Set-Cookie 头将一个或多个 Cookie 发送给客户端。客户端在随后的请求中通过在请求头中包含 Cookie 来将其发送回服务器。Cookie 可以用于记录用户的会话状态、跟踪用户行为或存储用户偏好设置等。Cookie 可以设置过期时间,可以是会话性 Cookie(在关闭浏览器后失效)或持久性 Cookie(在一段时间后失效)。
  3. 会话(Session):

    会话是服务器端用于跟踪用户状态的机制。当用户通过身份验证后,服务器会为其创建一个唯一的会话,并将会话ID发送给客户端。客户端在后续请求中通常使用 Cookie 或 URL 重写来传输会话ID。服务器使用会话ID来标识和管理用户的状态和数据,以确保用户的连续性体验。会话数据通常存储在服务器的内存或数据库中,并在一定时间内保持有效。与令牌不同,会话数据由服务器负责管理,客户端只存储会话ID。

总结:

  • 令牌是一种用于身份验证和授权的字符串凭证,由客户端保存并在每次请求中发送给服务器。

  • Cookie 是一种存储在客户端上的文本文件,用于跟踪用户状态和存储用户相关信息。

  • 会话是服务器端用于跟踪用户状态的机制,通过会话ID在客户端和服务器之间进行通信。

        需要注意的是,在实际应用程序中,令牌、Cookie和会话经常同时使用,例如,可以使用令牌进行身份验证,确认用户的身份和权限,然后使用会话来维护用户的状态和数据,以提供更个性化的用户体验或实现特定的业务逻辑。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis原理篇(一)

一、原理篇-Redis数据结构 1.1 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 Redis虽由C语言开发,不过Redis没有直接使用C语言中的字符串&#xff0…

vulnhub靶机Thales:1

Thales:1 靶机地址:Thales: 1 ~ VulnHub 主机发现 arp-scan -l 扫描端口 nmap --min-rate 10000 -p- 192.168.21.135 nmap -sV -sT -O -p22,8080 192.168.21.135 简单的漏洞的扫描 nmap --scriptvuln -p22,8080 192.168.21.135 答题思路就是从8080端口拿到账号密…

MS VC 2022开发Linux应用记录之01篇

安装MSVS2022的时候勾上对开发Linux C程序的选项在Windows中安装Oracle Virtual Box程序,在里面安装Ubuntu最新稳定版,要选择多个CPU核在VirtualBox中添加一个网卡,选择Host Only在虚拟机中使用ifconfig命令,在宿主机中使用ipconfig, 可以看到两者存在同…

有限状态自动机

1 什么是有限状态自动机 1.1什么是计算 维基百科定义:计算(英语:Calculation)是一种将“单一或多个的输入值”转换为“单一或多个的结果”的一种思考过程。可以简单理解为给出一个问题得到一个答案的过程。如下图所示日常生活比…

AITO问界,先经沧海而后造船

IT领域最重要的原则之一,就是软件快速迭代。 对于科技产品来说,需求永远在升级。一项技术或软件系统问世之后,如果后续不再迭代,结果可能是灾难性的。 比如几年前,很多读者可能都买过一些“不了了之”的智能消费硬件&a…

性能测试Ⅳ

在进行性能测试的时候需要使用不同阶段的数据来测试,分析不同数据下资源的情况。 java -jar -Xms1M -Xmx1M -XX:MaxMetaspaceSize10m DBPlus-0.0.1-SNAPSHOT.jar 最小内存 最大内存 如果内存太小会导致内存泄露 启动程序 java -Djava.rmi.serv…

JavaWeb课程设计项目实战(09)——项目编码实践6

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 在本节教程中,我们实现修改学生的功能。当在学生列表页面点击修改后首先将依据id查询该生的详细信息,然后将这些信息展示在修改页面。当完成学生信息…

Transformer Encoder (Bert)

参考:图解Self-Attention_子燕若水的博客-CSDN博客 举个例子: 假设输入数据形状为(243,34),表示的是243帧,每帧包含34个特征(比如17个关键点的x,y坐标)。那么这个数据在Transformer Encoder中的流动过程如下: 输入数据shape是(243, 34),表示243个时间…

【字符流】案例:点名器

案例:点名器 1.需求: 我有一个文件里面存储了班级同学的姓名,每一个姓名占一行,要求通过程序实现随机点名器 2.思路: 创建字符缓冲输入流对象创建ArrayList集合对象调用字符缓冲输入流对象的方法读数据把读取到的字…

vue ---- filters过滤器中不能使用this问题

在日常开发中,使用filters是很正常,最近遇到切换单位,页面上显示的数据要根据单位转换,这时就需要根据data里面的变量去转换,可是filters里面不能使用this 解决: 1、先在return中声明一个变量that&#xf…

vuejs源码之模版编译原理

之前我们说过虚拟dom,也就是虚拟dom拿到vnode后所做的事情,而模版编译是如何让虚拟dom拿到vnode。 模版编译的目标就是生成渲染函数,而渲染函数的作用是每次执行它,它就会使用当前最新的状态生成一份新的vnode,然后用…

========Java基础——小结1========

一、Java 两大版本 Java 主要分为两个版本: Java SE 和Java EE。 Java SE 全称Java Platform Standard Edition,是 Java 的标准版,主要用于桌面应用程序开发,它包含了 Java 语言基础、JDBC (Java 数据库连接)、I/O (输入/输出)、TCP/IP 网络…

【问题记录】Ubuntu 22.04 环境下,程序报:段错误(核心已转储)怎么使用 core 文件和GDB调试器 解决?

目录 环境 问题情况 解决思路 原因分析 解决方法 番外知识 环境 VMware Workstation 16 Pro (版本:16.1.2 build-17966106)ubuntu-22.04.2-desktop-amd64 问题情况 本人在运行百万并发的服务端程序时,程序运行报&#xff1a…

语音基石模型Speech Foundation Models

语音基石模型(Speech Foundation Models) 主要包含三部分: 1.语音表示学习(Speech representation learning) 自监督学习模型(Self-suprevised learning, SSL model)Representation benchmark…

CMU 15-445 -- Embedded Database Logic - 12

CMU 15-445 -- Embedded Database Logic - 12 引言User-Defined Functions (UDF)SQL FunctionsExternal Programming Language Stored ProceduresStored Procedures 与 UDF 的区别 Database TriggersChange NotificationsUser-Defined Types (UDT)Viewsviews vs select...intov…

区别出过孔的内径、外径、单边孔环、电镀铜厚

自记: 这个参数是啥?下图区别出过孔的内径、外径、单边孔环、电镀铜厚 嘉立创单双面最小过孔内径0.3mm/外径0.6mm(极限0.56mm),四、六层最小过孔内径0.2mm/外径0.45mm(极限0.40mm),外…

学习day50

自定义指令总结: 一:定义语法: (1)局部指令: new Vue({ directives{指令名,配置对象} }) 或 new Vue({ directives{指令名,回调函数} }) (2)全局对象 Vue.dir…

基于Gym Anytrading 的强化学习简单实例

近年来强化学习(RL)在算法交易领域受到了极大的关注。强化学习算法从经验中学习并基于奖励优化行动使其非常适合交易机器人。在这篇文章,我们将简单介绍如何使用Gym Anytrading环境和GME (GameStop Corp.)交易数据集构建一个基于强化学习的交易机器人。 强化学习是…

【Java从0到1学习】05 Java 数组

1. 数组概述 需求:现在需要统计某公司员工的工资情况,例如计算平均工资、找到最高工资等。假设该公司有80名员工,用前面所学的知识,程序首先需要声明80个变量来分别记住每位员工的工资,然后在进行操作,这样…

MySQL一些知识

六、MySQL命令参数 七、远程登录 use mysql 八、SQL语句和常见的SQL操作 九、数据库和表的创建及插入 指定字段名称,按照表的字段名称顺序写: 指定字段名称: 字段名称可以不全部指定: