当前位置: 首页 > news >正文

Session和Cookie区别介绍+面试题

Session

会话:

  • 对应的英文单词:session
  • 用户打开浏览器,进行一系列操作,然后关闭浏览器。整个过程叫做一次会话
  • 一个会话包含多次请求

session机制属于B/S结构的一部分,主要的作用就是为了保存会话状态。(用户登录成功后,将用户一直登录的状态保存到会话中)

使用session机制的原因

  • 因为HTTP协议是一种无状态协议
    • 无状态:请求的时候,B和S是连接的,当请求结束后,连接断开。
    • 可以降低服务器的压力。
  • 为了保存会话状态,只能使用session。
  • 不使用request和application的原因
    • request的作用域太小:一次请求过后就销毁,再次请求,request对象不是同一个。
    • application的作用域太大:一个应用一个,浏览器打开~关闭,再打开一个浏览器,还是同一个application对象,不符合一次会话状态。
  • 从浏览器打开到关闭,session对象都是同一个。

session的实现原理

图片描述:

文字描述:

  1. 浏览器第一次访问服务端,服务端会生成一个对象以及对应的sessionId,将sessionId返回给浏览器
  2. 浏览器拿到这个sessionId后,以cookie的形式保存sessionId
  3. 下一次访问服务端的时候,自动将浏览器内存中的sessionId发送给服务端,服务端根据sessionId找到对应的session对象
  4. 关闭浏览器后,内存消失,cookie消失,sessionId消失,会话结束

第一次访问,response中收到一个服务端返回的sessionId,以cookie的形式存储=7A

 

下一次再访问的时候,会自动的将sessionId发送给服务端

cookie禁用

服务端正常向浏览器发送sessionId,但是浏览器拒收,所以浏览器器每次访问服务端,返回的session对象都是全新的。

如果想在cookie禁用情况下,使用session机制:

使用URL重写机制:http://localhost:8080/testSession;jsessionid=E62524626BE76547D7287F6B7BB73239

这样的成本较大,因为每次访问服务路径,都需要拼接一个sessionId。

总结

  • session是保存在服务端的,由服务端负责创建
    • 创建的方法:
      • request.getSession(); // 获取到一个session对象
      • request.getSession(false); // 会判断当前session是否存在,不存在返回的session对象是null
  • 因为HTTP协议的B/S结构,浏览器关闭,服务端是不知道,所以session并不会销毁,当一段时间内session对象没人操作,这个session对象就会销毁,默认时间是30分钟。
  • 一次会话:session创建~session销毁
  • session两种模式:
    • 手动销毁:服务端调用API:invalidate();
    • 超时销毁:一段时间内没人操作session对象

Cookie

  • 在session的实现原理中,每一个session对象都有一个对应的sessionId。
  • 例如:JSESSIONID=5CB05924651451FD94F42011461CC4FB,这个键值对数据就是一个cookie实例。
  • 只要浏览器不关闭,用户再次发起请求,浏览器会自动将"运行内存"中的cookie发送个服务端
  • 服务端根据"5CB05924651451FD94F42011461CC4FB"这个值去找对应的session对象
  • cookie中的key 和 value都是字符串

保存位置

  • 最终保存在浏览器客户端上
  • 也可以保存在运行内存上【浏览器关闭后cookie就消失】
  • 还可以保存在磁盘文件上【永久保存】

作用

  • cookie和session一样,都是为了保存会话状态

java中操作cookie

创建cookie实例:

Cookie product = new Cookie("productId","1gaga3g23t32g");
Cookie user = new Cookie("name","admin");

设置cookie的有效时间

  • 有效时间 > 0 该cookie写入到磁盘中。
  • 有效时间 = 0 该cookie写入到磁盘中,覆盖之前设置的cookie,也可以理解为删除cookie
  • 有效时间 < 0 该cookie会被保存到浏览器运行内存上
  • 不设置 该cookie会被保存到浏览器运行内存上
// 设置有效时间
product.setMaxAge(60 * 60);

设置cookie关联的路径

举例URL:http://localhost:8080/cookie/create

默认关联的路径为:http://localhost:8080/cookie/*,这些路径浏览器都会自动发送cookie到服务端

如果设置了关联路径,就以设置为主

product.setPath("/cookie");

返回cookie给浏览器

response.addCookie(product);

服务端获取cookie

返回值为一个数组,当cookie获取不到时,返回null

Cookie[] cookies = req.getCookies();
if (cookies != null) {for (Cookie cookie : cookies) {String name = cookie.getName();String value = cookie.getValue();System.out.println(name+"--"+value);}
}

面试题

cookie和session的区别

1.Session的定义:

Session对象是存储在服务器端的,主要用来存储用户会话所需的属性数据和配置数据。SessionlD需要存储在浏览器端,浏览器发送接口请求的时候需要带着这个SessionlD。

2.Cookie的定义:

Cookie是一小段存储在浏览器端的文本数据,大小不超过4KB。

某些网站采用Session机制识别用户的身份,通常也会将SessionlD存储在Cookie中。发送网络请求的时候,Cookie会在请求头里一起发送给服务器端。

为什么需要cookie和session?

Cookie 和 Session 是用来在客户端和服务器之间存储和维护状态信息的两种不同技术。

Cookie 是客户端存储的一小块数据,它会在客户端和服务器之间来回传递。Cookie 会被存储在浏览器的文件系统里,并且在浏览器发送请求的时候会自动携带这些数据。

Session 是在服务器端存储的一小块数据,它可以用来跟踪用户的状态。Session 数据存储在服务器端,并且由服务器端来维护。 客户端访问服务器时,服务器会根据客户端的请求来确定客户端的身份,并且为客户端分配一个session ID 。客户端每次请求时都会携带session ID ,服务器通过这个 session ID 来识别客户端并获取相应的 session 数据。

详述 session 工作原理?

Session 是一种在 Web 应用程序中跟踪用户状态的机制。当用户访问 Web 应用程序时,服务器会为该用户创建一个唯一的会话 ID,并将该 ID 存储在用户的浏览器中的 cookie 中。在用户与应用程序交互时,服务器会使用该会话 ID 来识别用户,并在服务器端存储与该用户相关的信息。这些信息可以包括用户的登录状态、购物车内容、浏览历史等。通过使用 session,Web 应用程序可以实现更高级的功能,如用户身份验证、数据持久化等。

为什么说session 比cookie更安全?

Cookie 是一种在用户计算机上存储数据的机制。Web 应用程序可以使用 Cookie 存储用户信息,例如用户 ID、偏好设置和购物车内容等。但是,Cookie 存储在用户计算机上,而且可以在客户端上被访问和修改,这使得 Cookie 更容易受到攻击和伪造,从而使其成为安全威胁。

相比之下,Session 机制将数据存储在服务器端,并且仅在用户与 Web 应用程序交互时将其发送到客户端。用户无法访问或修改存储在服务器上的 Session 数据,这使得 Session 比 Cookie 更安全。此外,Web 应用程序可以使用 SSL/TLS 加密来保护传输过程中的 Session 数据,从而进一步增强安全性。

总的来说,虽然 Cookie 与 Session 都用于 Web 应用程序中的用户跟踪,但 Session 更安全,因为它将数据存储在服务器端,而不是在用户计算机上存储,从而减少了安全风险。

相关文章:

Session和Cookie区别介绍+面试题

Session 会话&#xff1a; 对应的英文单词&#xff1a;session用户打开浏览器&#xff0c;进行一系列操作&#xff0c;然后关闭浏览器。整个过程叫做一次会话一个会话包含多次请求 session机制属于B/S结构的一部分&#xff0c;主要的作用就是为了保存会话状态。(用户登录成功后…...

easyx

普通的画线图什么的 首先我们需要安装一个easyx的图形库&#xff0c;然后把头文件搞出来 #include <stdio.h> #include <easyx.h>//easyx画线啥啥的图形库 #include <graphics.h> #include <math.h> #include <conio.h>//键盘操作的头文件 设…...

记一次科学

华为云与Centos8 华为云99元Hongkong的服务器&#xff1a;1M&#xff0c;1C&#xff0c;2G&#xff0c;40G&#xff0c;自带不可更改的Centos 8.2 64bit 华为yum源不可以&#xff0c;网上找了可用的CentOS8 官方源不支持后配置yum源 # 备份 mv /etc/yum.repos.d/CentOS-Base…...

亚马逊被人差评了怎么办?

第一种&#xff1a; 也是最简单的做法就是通过电话或者邮件联系留差评的买家&#xff0c;大致意思就是按照货值的2-3倍作为赔偿&#xff0c;能不能把差评给删了 赔偿一个普通产品2-3倍的价格比起找服务商删一个差评几百到一千不等可以说是绰绰有余了&#xff0c;碰到那种愿意…...

【目标检测】YOLOv5:修改自己的网络结构

前言 YOLOv5就像一座金矿&#xff0c;里面有无数可以学习的东西。之前的博文一直将YOLOv5当作一个黑盒使用&#xff0c;只考虑模型的输入和输出&#xff0c;以此来对模型进行二次开发。 本篇博文将更近一层&#xff0c;深入到“金矿”内部&#xff0c;来尝试对模型结构进行替换…...

spring boot 工程整合mongodb,遇到的坑

首先说一下背景&#xff0c;因为其他的一个web工程有使用mongo&#xff0c;我想着给另外一个工程把mongo也加过来吧。也是最近做一个发送 丘比特信 的需求&#xff0c;觉得这个信应该是存到 mongodb。结果拿过来遇到了很大的坑&#xff0c;也是对版本对原理不了解吧。 下面介…...

防抖函数(最全 最干净 最好理解)

1.应用场景 1.input输入框 输入远程查询 2.邮箱&#xff0c;手机号验证&#xff0c;用户名验证 3.resize等高评率场景 2.解决问题 高频场景带来的重复渲染 等问题 多次操作 只在操作结束后再执行操作函数 3.具体实现 3.1this问题&#xff08;因为settimeout是window的对…...

王小川,才是深「爱」李彦宏的那个人?

在推出中国首个类ChatGPT产品「文心一言」后&#xff0c;李彦宏在接受专访时断言&#xff0c;中国基本不会再出一个OpenAI了&#xff0c;「创业公司重新做一个ChatGPT其实没有多大意义&#xff0c;基于大语言模型开发应用机会很大&#xff0c;没有必要再重新发明一遍轮子。」 听…...

南京邮电大学通达学院2023《电子装配实习》报告

南京邮电大学通达学院2023《电子装配实习》报告 一 声明二 题目/实习报告提示三 例答 红笺寄 休遣玉人知 ——赠nmy 一 声明 南京邮电大学通达学院2023《电子装配实习》报告 答案更新时间:2023.04.10&#xff0c;已更新完成&#xff0c;如无错误不在更新 由于作者解答能力有限…...

Linux--tty

Linux 终端(TTY) TTY 是 Teletype 或 Teletypewriter 的缩写&#xff0c;原来是指电传打字机&#xff0c;后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器&#xff0c;都是作为计算机的终端设备存在的&#xff0c;所以 TTY 也泛指计算机的终端(terminal)设…...

一位女程序员的自述:我是如何成为前端工程师的

今天&#xff0c;我想和大家分享一下我的职场经历&#xff1a;我是如何成为一名前端工程师的&#xff0c;以及我为什么会选择这个职业。此外&#xff0c;大家比较关心的是我们为什么要出国工作呢&#xff1f;也是想给自己的职业生涯做一个阶段性的总结&#xff0c;尤其是作为一…...

C++命名空间详解

1.什么是命名空间 在c中&#xff0c;名称&#xff08;name&#xff09;可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大&#xff0c;名称互相冲突性的可能性越大。另外使用多个厂商的类库时&#xff0c;也可能导致名称冲突。为了避免&#xff0c;在大规模程序…...

HDMI EDID概念梳理

EDID概念梳理&#xff1a; EDID数据格式&#xff1a; EDID包含两个部分&#xff0c;基本的EDID只有128个字节&#xff0c;还有128字节的扩展EDID&#xff0c;扩展部分不是必须有的。那通常电视都有扩展EDID。那EDID的详细定义在规范里面都可以找到&#xff0c;主要有以下几部分…...

Android端推送消息之极光推送

推送方式 轮询 --实现方式: 周期性主动获取网络中的数据; --缺点: 费电, 费流量; SMS --实现方式: 服务器端向手机端发送短信, 手机监听短信广播, 将拦截的短信信息进行显示; --优点: 省电, 省流量, 在没有网络的偏远地点也能接收到推送消息; --缺点: 费钱, 一毛钱一条;…...

2023测试工程师全新技术栈,吃透这些,起薪就15k

相信每个准备软件测试面试的同学&#xff0c;不管你是大学刚毕业&#xff0c;满心憧憬着进入公司实习、非计算机行业转行软件测试、自学测试就业还是培训后就业&#xff0c;都会面临着众多的疑问和不解&#xff0c;那就是该怎么走出着第一步&#xff0c;今天本文一次性告诉你&a…...

十、CNN卷积神经网络实战

一、确定输入样本特征和输出特征 输入样本通道数4、期待输出样本通道数2、卷积核大小33 具体卷积层的构建可参考博文&#xff1a;八、卷积层 设定卷积层 torch.nn.Conv2d(in_channelsin_channel,out_channelsout_channel,kernel_sizekernel_size,padding1,stride1) 必要参数&a…...

App 自动化测试

一、移动端测试基础 1 移动端自动化环境搭建 1.1 java安装 1.2 Android SDK安装 SDK (Software Development Kit) 软件开发工具包是软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。Android SDK 就是 Android 专属的软件开…...

考研英语知识点

考研英语知识点 一、在考研英语考试中&#xff0c;常考的英语时态 1.一般现在时 (Simple Present Tense) 一般现在时指的是现在正在进行或经常发生的事情。它用于描述普遍真理&#xff0c;频繁的习惯&#xff0c;以及现在正在发生的事情。例如&#xff1a;我每天早上六点起床…...

IPSEC实验(IPSECVPN点到点,DSVPN,IPSECVPN旁挂)

目录 一、复现实验1、防火墙的IPSECVPN点到点实验-1,拓扑图的搭建-2&#xff0c;配置IP,开通ping,并且设置策略-3&#xff0c;在网络中的IPSEC进行配置第一阶段&#xff1a;发出的UDP500流量第二阶段 发出的ESP流量二台防火墙建立策略禁用其它策略&#xff0c;在IPSEC上配置策略…...

从4k到42k,软件测试工程师的涨薪史,给我看哭了

清明节一过&#xff0c;盲猜大家已经无心上班&#xff0c;在数着日子准备过五一&#xff0c;但一想到银行卡里的余额……瞬间心情就不美丽了。 最近&#xff0c;2023年高校毕业生就业调查显示&#xff0c;本科毕业月平均起薪为5825元。调查一出&#xff0c;便有很多同学表示自己…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...