Session和Cookie区别介绍+面试题

news2025/3/11 6:52:59

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 更安全,因为它将数据存储在服务器端,而不是在用户计算机上存储,从而减少了安全风险。

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

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

相关文章

Spring使用注解存储和读取对象

文章目录 一、存储Bean对象配置扫描添加注解存储Bean对象注解使用范围Bean的命名五大类注解的关系为什么需要五大类注解? 二、方法注解BeanBean重命名 三、对象注入属性注入Setter注入构造方法注入Autowired 和 Resource 的区别 一、存储Bean对象 之前我们存储Bean时&#xff…

【MATLAB基础绘图第2棒】绘制柱状/饼图填充图

MATLAB绘制柱状填充图 方法1&#xff1a;hatchfill2工具1.1 案例1&#xff1a;柱状图填充1.2 案例2&#xff1a;饼图填充 方法2&#xff1a;applyhatch函数2.1 案例1&#xff1a;柱状图填充2.2 案例2&#xff1a;饼图填充 方法3&#xff1a; applyhatch_plusC函数3.1 案例1&…

分析软件及其隐藏后门实验笔记

软件后门和软件加壳是什么 软件后门可以理解为在软件中植入病毒等具有后门功能的代码&#xff0c;通过运行软件来对用户的系统造成破坏、窃取机密等。 软件加壳一种常用的方式是在二进制的程序中植入一段代码&#xff0c;在运行的时候优先取得程序的控制权&#xff0c;之后再把…

Cisco SD-WAN (Viptela) version 20.11.1 ED - 软件定义广域网

请访问原文链接&#xff1a;https://sysin.org/blog/cisco-sd-wan-20/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 支持 SASE 的架构&#xff0c;其集成了面向多云、安全、统一通信和应用优化的各种功能&#xff0c;可用于轻…

ChatGPT干掉程序员?想多了...

GPT-4才诞生没几天&#xff0c;感觉朋友圈已经被这个人工智能刷屏了&#xff0c;大家一边在感叹人工智能行业蓬勃发展的同时&#xff0c;一边又有不少人患上了AI焦虑症。 这其中&#xff0c;以程序员首当其冲。原因无他&#xff0c;只因为GPT-4的惊人的能力和不少大佬的发言。 …

4.17~4.18学习总结

网络编程 概述 1.什么是网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输&#xff0c;计算机跟计算机之间可以通过网络进行数据传输。 2.常见的软件架构&#xff1a; B/S&#xff0c;C/S 3.通信的软件架构CS BS各有什么区别和优点…

阿里云免费使用stable diffusion三个月【ai生成图片】详细教程【保姆级】

起因 这两天关注了ai生成图片&#xff0c;尝试了mijiourney服务【比较贵没入手】&#xff0c;结果免费的没有了&#xff0c;没用上&#xff0c;换了国内的一些小程序体验了下 综合体验式是太慢了&#xff0c;而他们是基于国外开源的stable diffiusion模型开发的【可以比肩mij…

【FAQ】关于华为推送服务因营销消息频次管控导致服务通讯类消息下发失败的解决方案

一&#xff0e; 问题描述 使用华为推送服务下发IM消息时&#xff0c;下发消息请求成功且code码为80000000&#xff0c;但是手机总是收不到消息&#xff1b; 在华为推送自助分析&#xff08;Beta&#xff09;平台查看发现&#xff0c;消息发送触发了频控。 二&#xff0e; 问题…

java 快排算法详解,java 快排代码

快排是一种高效的数据结构&#xff0c;它使用一个关键字&#xff08;Key&#xff09;来表示数据元素的一个集合。也就是说&#xff0c;快排是一个有序数组&#xff0c;而这个有序数组由两个元素组成。 快排的基本思想是&#xff1a;如果数组元素的值比它前面的两个元素都大&…

记录一 :对象锁和类锁

目录 简介 通过8个案例来解释说明 案例及总结 简介 阿里规约【强制】高并发时&#xff0c;同步调用应该去考量锁的性能损耗。能用无锁数据结构&#xff0c;就不要用锁&#xff1b;能 锁区块&#xff0c;就不要锁整个方法体&#xff1b;能用对象锁&#xff0c;就不要用类锁。…

提高工作效率的宝藏网站和宝藏工具

一、好用的网站 面包多 面包多 创作者在面包多&#xff0c;通过出售课程&#xff0c;文章&#xff0c;绘画&#xff0c;创意作品&#xff0c;软件&#xff0c;电子书&#xff0c;音乐&#xff0c; 游戏&#xff0c;咨询服务&#xff0c;每月获得 数百万元 收入。 写作素材模板…

二阶段算法:R-CNN类网络

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

【Java 数据结构】ArrayList的实现和底层源码讲解

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

java day9

第九章 使用swing 9.1 创建应用程序9.1.1 创建页面9.1.2 开发框架9.1.3 创建组件&& 9.1.4 将组件加入到容器中 9.2 使用组件9.2.1 图标9.2.2 标签9.2.3 文本框9.2.4 文本区域9.2.5 可滚动窗格9.2.6 复选框和单选按钮9.2.7 组合框9.2.8 列表 9.1 创建应用程序 import j…

FPGA基于SFP光口实现10G万兆网UDP通信 10G Ethernet Subsystem替代网络PHY芯片 提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、详细设计方案4、vivado工程详解5、上板调试验证并演示6、福利&#xff1a;工程代码的获取 1、前言 目前网上的fpga实现udp基本生态如下&#xff1a; 1&#xff1a;verilog编写的udp收发器&#xff0c;但不带ping功能&#xff0c;这样的代…

The GNU nano text editor (文本编辑器)

The GNU nano text editor (文本编辑器) https://www.nano-editor.org/ GNU nano is a small and friendly text editor. 1 GNU nano The GNU nano text editor https://www.nano-editor.org/dist/latest/nano.html Source Code https://git.savannah.gnu.org/cgit/nano.gi…

EIGRP 配置,详解拓扑表,路由汇聚

1.3 EIGRP 拓扑&#xff0c;路由以及汇聚 1.3.1 实验目的 通过对 EIGRP 拓扑&#xff0c;路由以及汇聚相关实验的练习&#xff0c;掌握 EIGRP 建立拓扑信息的方式&#xff0c; 度量计算方法&#xff0c;如何调整度量&#xff0c;非等价负载均衡&#xff0c;以及 EIGRP 末节路…

anaconda ( jupyter notebook ) 安装 Cartopy库

文章目录 一、Cartopy库是什么&#xff1f;二、一步到位安装&#xff08;装不上的话用下面那个方法虚拟环境安装&#xff09;三、如何在anaconda ( jupyter notebook ) 虚拟环境安装 Cartopy库&#xff1f; 一、Cartopy库是什么&#xff1f; Cartopy 是一个开源免费的第三方 P…

mac压缩文件多了__MACOSX目录问题

文章目录 背景原因解决方案&#xff1a;更换压缩方式分析问题拓展&#xff08;.DS_Store&#xff09; 背景 项目中有一个场景&#xff0c;需要把目录压缩为app离线包的zip 但是压缩之后一致打不开&#xff0c;别人上传的zip是好的 原因 如图&#xff0c;我上传的在安卓设备…

D.8零样本文本分类应用:基于UTC的医疗意图分类,打通数据标注-模型训练-模型调优-预测部署全流程。

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…