Session和Cookie区别介绍+面试题
Session
会话:
- 对应的英文单词:session
- 用户打开浏览器,进行一系列操作,然后关闭浏览器。整个过程叫做一次会话
- 一个会话包含多次请求
session机制属于B/S结构的一部分,主要的作用就是为了保存会话状态。(用户登录成功后,将用户一直登录的状态保存到会话中)
使用session机制的原因
- 因为HTTP协议是一种无状态协议
- 无状态:请求的时候,B和S是连接的,当请求结束后,连接断开。
- 可以降低服务器的压力。
- 为了保存会话状态,只能使用session。
- 不使用request和application的原因
- request的作用域太小:一次请求过后就销毁,再次请求,request对象不是同一个。
- application的作用域太大:一个应用一个,浏览器打开~关闭,再打开一个浏览器,还是同一个application对象,不符合一次会话状态。
- 从浏览器打开到关闭,session对象都是同一个。
session的实现原理
图片描述:

文字描述:
- 浏览器第一次访问服务端,服务端会生成一个对象以及对应的sessionId,将sessionId返回给浏览器
- 浏览器拿到这个sessionId后,以cookie的形式保存sessionId
- 下一次访问服务端的时候,自动将浏览器内存中的sessionId发送给服务端,服务端根据sessionId找到对应的session对象
- 关闭浏览器后,内存消失,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 会话: 对应的英文单词:session用户打开浏览器,进行一系列操作,然后关闭浏览器。整个过程叫做一次会话一个会话包含多次请求 session机制属于B/S结构的一部分,主要的作用就是为了保存会话状态。(用户登录成功后…...
easyx
普通的画线图什么的 首先我们需要安装一个easyx的图形库,然后把头文件搞出来 #include <stdio.h> #include <easyx.h>//easyx画线啥啥的图形库 #include <graphics.h> #include <math.h> #include <conio.h>//键盘操作的头文件 设…...
记一次科学
华为云与Centos8 华为云99元Hongkong的服务器:1M,1C,2G,40G,自带不可更改的Centos 8.2 64bit 华为yum源不可以,网上找了可用的CentOS8 官方源不支持后配置yum源 # 备份 mv /etc/yum.repos.d/CentOS-Base…...
亚马逊被人差评了怎么办?
第一种: 也是最简单的做法就是通过电话或者邮件联系留差评的买家,大致意思就是按照货值的2-3倍作为赔偿,能不能把差评给删了 赔偿一个普通产品2-3倍的价格比起找服务商删一个差评几百到一千不等可以说是绰绰有余了,碰到那种愿意…...
【目标检测】YOLOv5:修改自己的网络结构
前言 YOLOv5就像一座金矿,里面有无数可以学习的东西。之前的博文一直将YOLOv5当作一个黑盒使用,只考虑模型的输入和输出,以此来对模型进行二次开发。 本篇博文将更近一层,深入到“金矿”内部,来尝试对模型结构进行替换…...
spring boot 工程整合mongodb,遇到的坑
首先说一下背景,因为其他的一个web工程有使用mongo,我想着给另外一个工程把mongo也加过来吧。也是最近做一个发送 丘比特信 的需求,觉得这个信应该是存到 mongodb。结果拿过来遇到了很大的坑,也是对版本对原理不了解吧。 下面介…...
防抖函数(最全 最干净 最好理解)
1.应用场景 1.input输入框 输入远程查询 2.邮箱,手机号验证,用户名验证 3.resize等高评率场景 2.解决问题 高频场景带来的重复渲染 等问题 多次操作 只在操作结束后再执行操作函数 3.具体实现 3.1this问题(因为settimeout是window的对…...
王小川,才是深「爱」李彦宏的那个人?
在推出中国首个类ChatGPT产品「文心一言」后,李彦宏在接受专访时断言,中国基本不会再出一个OpenAI了,「创业公司重新做一个ChatGPT其实没有多大意义,基于大语言模型开发应用机会很大,没有必要再重新发明一遍轮子。」 听…...
南京邮电大学通达学院2023《电子装配实习》报告
南京邮电大学通达学院2023《电子装配实习》报告 一 声明二 题目/实习报告提示三 例答 红笺寄 休遣玉人知 ——赠nmy 一 声明 南京邮电大学通达学院2023《电子装配实习》报告 答案更新时间:2023.04.10,已更新完成,如无错误不在更新 由于作者解答能力有限…...
Linux--tty
Linux 终端(TTY) TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TTY 也泛指计算机的终端(terminal)设…...
一位女程序员的自述:我是如何成为前端工程师的
今天,我想和大家分享一下我的职场经历:我是如何成为一名前端工程师的,以及我为什么会选择这个职业。此外,大家比较关心的是我们为什么要出国工作呢?也是想给自己的职业生涯做一个阶段性的总结,尤其是作为一…...
C++命名空间详解
1.什么是命名空间 在c中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序…...
HDMI EDID概念梳理
EDID概念梳理: EDID数据格式: EDID包含两个部分,基本的EDID只有128个字节,还有128字节的扩展EDID,扩展部分不是必须有的。那通常电视都有扩展EDID。那EDID的详细定义在规范里面都可以找到,主要有以下几部分…...
Android端推送消息之极光推送
推送方式 轮询 --实现方式: 周期性主动获取网络中的数据; --缺点: 费电, 费流量; SMS --实现方式: 服务器端向手机端发送短信, 手机监听短信广播, 将拦截的短信信息进行显示; --优点: 省电, 省流量, 在没有网络的偏远地点也能接收到推送消息; --缺点: 费钱, 一毛钱一条;…...
2023测试工程师全新技术栈,吃透这些,起薪就15k
相信每个准备软件测试面试的同学,不管你是大学刚毕业,满心憧憬着进入公司实习、非计算机行业转行软件测试、自学测试就业还是培训后就业,都会面临着众多的疑问和不解,那就是该怎么走出着第一步,今天本文一次性告诉你&a…...
十、CNN卷积神经网络实战
一、确定输入样本特征和输出特征 输入样本通道数4、期待输出样本通道数2、卷积核大小33 具体卷积层的构建可参考博文:八、卷积层 设定卷积层 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 专属的软件开…...
考研英语知识点
考研英语知识点 一、在考研英语考试中,常考的英语时态 1.一般现在时 (Simple Present Tense) 一般现在时指的是现在正在进行或经常发生的事情。它用于描述普遍真理,频繁的习惯,以及现在正在发生的事情。例如:我每天早上六点起床…...
IPSEC实验(IPSECVPN点到点,DSVPN,IPSECVPN旁挂)
目录 一、复现实验1、防火墙的IPSECVPN点到点实验-1,拓扑图的搭建-2,配置IP,开通ping,并且设置策略-3,在网络中的IPSEC进行配置第一阶段:发出的UDP500流量第二阶段 发出的ESP流量二台防火墙建立策略禁用其它策略,在IPSEC上配置策略…...
从4k到42k,软件测试工程师的涨薪史,给我看哭了
清明节一过,盲猜大家已经无心上班,在数着日子准备过五一,但一想到银行卡里的余额……瞬间心情就不美丽了。 最近,2023年高校毕业生就业调查显示,本科毕业月平均起薪为5825元。调查一出,便有很多同学表示自己…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
