【JavaWeb】Cookie、Session

文章目录

  • Cookie、Session
  • 一、Cookie(客户端)
    • 1、Cookie 的 特点
    • 2、Cookie 的 工作原理
    • 3、Cookie 的 基本操作
    • 5、Cookie 的 域名与路径
    • 6、Cookie 的 存活时间
    • 7、Cookie 的 删除
  • 二、Session(服务端)
    • 1、Session 的 特点
    • 2、Session 的 工作原理
    • 3、Session 的 基本操作
    • 4、Session 的 存活时间
    • 5、Session 的 失效(Cookie导致)

Cookie、Session

一、Cookie(客户端)

Cookie 产生于服务端(服务器),保存在客户端(浏览器)。

  • 将数据保存到客户端(浏览器),降低服务器压力。

1、Cookie 的 特点

  • Cookie 的 数据类型:字符串的键值对 entry (name : value)
  • Cookie 的 大小限制:4k(单个)
  • Cookie 的 数量限制:同一域名下,不能超过50个
  • Cookie 的 唯一性:同一域名下,Cookie 是唯一的(由 path 和 name 决定)
  • Cookie 的 安全性:不安全(信息保存在用户的电脑上,相对来说都不安全)

2、Cookie 的 工作原理

服务器响应时,发送Cookie给浏览器(通过响应头Set-Cookie

在这里插入图片描述

浏览器访问时,携带Cookie到服务器(通过请求头Cookie

在这里插入图片描述

3、Cookie 的 基本操作

创建 Cookie,添加到 HttpServletResponse 对象中返回

// 创建cookie对象
Cookie cookie = new Cookie("product","xiaomi");// 设置cookie作用的域名
cookie.setDomain("localhost");// 设置cookie作用的路径(/代表一切路径)
cookie.setPath("/");// 设置cookie的存活时间(单位是s,默认是-1,浏览器关闭即销毁)
cookie.setMaxAge(24 * 60 * 60);// 添加Cookie到响应中(可以添加多个Cookie)
response.addCookie(cookie);

通过 HttpServletRequest 对象获取 Cookie

// 获取cookie对象
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {String name = cookie.getName();String value = cookie.getValue();
}

5、Cookie 的 域名与路径

// 设置cookie作用的域名
cookie.setDomain("localhost");// 设置cookie作用的路径(/代表一切路径)
cookie.setPath("/");
  • 域名 domain:浏览器请求时,只会携带 域名 和 访问网站一致 的 cookie
  • 路径 path:同一域名下,Cookie 是唯一的(由 path 和 name 决定)

下面举例说明:

Cookie	A 	domain=localhost	path=/a
Cookie	B	domain=localhost	path=/a/b访问  http://localhost:8080/a			携带 A
访问  http://localhost:8080/a/b		携带 A、B
访问  http://localhost:8080/b			不会携带
访问  http://www.baidu.com:8080/a		不会携带

6、Cookie 的 存活时间

// 设置cookie的存活时间(单位是s)
cookie.setMaxAge(24 * 60 * 60);
  • 设置为负数:浏览器将Cookie保存在内存中,浏览器关闭,Cookie销毁。(没有设置 默认是-1
  • 设置为正数:浏览器将Cookie持久化到硬盘中,从浏览器接收到的时间开始算起,MaxAge 秒后到期。
  • 设置为 0:立即销毁。一般用于删除Cookie。

如果希望Cookie可以在多个会话中共享数据(浏览器多次打开关闭),需要设置MaxAge正数

7、Cookie 的 删除

  • 浏览器端:在浏览器中手动清除Cookie
  • 服务器端:发送一个存活时间为0的Cookie覆盖原来的Cookie即可(domain、path、name与要删除的cookie一致)
// 创建cookie对象(domain、path、name与要删除的cookie一致)
Cookie cookie = new Cookie("product","xiaomi");
cookie.setDomain("localhost");
cookie.setPath("/");// 设置存活时间为0(立即销毁)
cookie.setMaxAge(0);// 添加Cookie到响应中
response.addCookie(cookie);

二、Session(服务端)

Session 产生于服务端,保存在服务端。(将 JSESSIONID 通过 cookie 返回给客户端)

  • 将数据保存到服务端(服务器),保证数据的安全性。

1、Session 的 特点

  • Session 的 数据类型:任意类型的数据 Object
  • Session 的 大小和数量:没有限制(取决于服务器的内存)
  • Session 的 安全性:存储的数据相对安全。

2、Session 的 工作原理

Session 是基于 Cookie 实现的。每个 Session 都有一个唯一的编号 JESSIONID

服务器响应时,将 JESSIONID 通过 Cookie 发送给浏览器(通过响应头Set-Cookie

在这里插入图片描述

浏览器访问时,通过 Cookie 携带 JESSIONID(通过请求头Cookie

在这里插入图片描述

通过唯一的编号 JESSIONID,就能获取到对应的 Session

3、Session 的 基本操作

通过 HttpSession 对象进行 Session 的存取

// session不存在,新建session对象 | session已存在,返回已经存在的session
HttpSession session = request.getSession();// 存储 session
session.setAttribute("userName", "zs");// 获取 session 属性
Object userName = session.getAttribute("userName");// 获取 session 的id
String sessionId = session.getId();// 移除 session 属性
session.removeAttribute("userName");// 销毁 HttpSession 对象
session.invalidate();

4、Session 的 存活时间

Session 的 存活时间 由HttpSession的最大不活动时间决定(默认是30min)

代码中设置:

session.setMaxInactiveInterval(15 * 60); // 15分钟

配置文件中设置:

server.servlet.session.timeout=15m  // 15分钟

5、Session 的 失效(Cookie导致)

由于 Session 是基于 Cookie 实现的,如果记录了 JSESSIONID 的 Cookie 被销毁,Session 也会失效。

  • 默认情况下,记录了 JSESSIONID 的 Cookie 由 Tomcat 自动创建,没有设置存活时间,浏览器关闭即销毁。

解决方案:手动创建 name=JESSIONID 的 Cookie,替代 Tomcat 自动创建的 Cookie,并设置存活时间

HttpSession session = request.getSession();
session.setAttribute("userName", "zs");
String id = session.getId();
Cookie cookie = new Cookie("JSESSIONID", id);
cookie.setMaxAge(15 * 60);	// 15分钟
response.addCookie(cookie);

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

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

相关文章

【学习笔记】卫星通信NTN 3GPP标准化进展分析(四)- 3GPP Release18内容

一、引言: 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划,是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析(一&#xff…

Codeforces Round 964 (Div. 4) A-E Java题解

比赛地址 Dashboard - Codeforces Round 964 (Div. 4) - Codeforces A题 签到题 给一个两位数 求各位上的数字和 直接对10取余加上本来的数除以10 // 注意类名必须为 Main, 不要有任何 package xxx 信息 // package Dduo; import java.io.*; import java.math.*; import j…

【Android自定义控件】Kotlin实现滚动效果的数字加减控件

前言 因业务上的需要,在APP中点餐时要有商品数目增减操作,数目增减的过程中有翻动的动画效果展现。在Android中有多种方式可以实现,本篇文章记录通过自定义View结合控件的平移动画相结合来实现此需求。 需求分析 根据上图分析控件的实现过程以…

力扣763-划分字母区间(Java详细题解)

题目链接:763. 划分字母区间 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法:局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优&#xf…

【STM32】RS485

RS485是常见的串口接口。 大部分图片来源:正点原子HAL库课程 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 串口、UART、TTL、RS232、RS422、RS485的关系 1.1 串口 1.2 UART、TTL、RS232、RS422、RS485 1.3 常见串口标准的比较 …

JS 如何判断是否是IE浏览器

例子 if(!!window.ActiveXObject || "ActiveXObject" in window){alert("抱歉,不支持IE浏览器!");return; }

【微机原理】v和∧区别

🌟 嗨,我是命运之光! 🌍 2024,每日百字,记录时光,感谢有你一路同行。 🚀 携手启航,探索未知,激发潜能,每一步都意义非凡。 在汇编语言和逻辑表达…

UE 【材质编辑】自定义材质节点

使用UE的材质编辑器,蓝图提供了大量的节点函数: 实际上,这是一段封装好的包含一串HLSL代码的容器。打开“Source/Runtime/Engine/Classes/Material”,可以看到很多不同节点的头文件: 照葫芦画瓢 以UMaterialExpressi…

★ 算法OJ题 ★ 力扣 LCR179 - 和为 s 的两个数字

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;小诗歌剧将和大家一起做一道双指针算法题--和为 s 的两个数字~ 目录 一 题目 二 算法解析 三 编写算法 一 题目 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 二 算法解析 …

MacOS使用FileZilla通过ssh密钥文件连接远程服务器(已解决)

需求描述 mac电脑,使用filezilla通过FTP连接远程服务器,使用ssh密钥文件代替密码。 版本信息 MacOS:Sonoma 14.5 M3芯片 FileZilla:3.66.5 在这里插入图片描述 连接 1. 创建站点 打开filezilla工具,右上角选择“文件 -> 站点管理器”,打开站点管理器弹窗。 2.…

AI搜索:重塑信息获取的新纪元

在信息爆炸的时代&#xff0c;如何快速、准确地获取所需信息成为了每个人面临的挑战。传统的搜索引擎虽然在一定程度上解决了这一问题&#xff0c;但广告干扰、结果冗余、内容质量参差不齐等问题仍让用户体验大打折扣。随着AI技术的不断发展&#xff0c;AI搜索产品以其独特的优…

docker安装配置、docker命令

一、CentOS7安装docker 1、安装 Docker CE 支持 64 位版本 CentOS 7&#xff0c;并且要求内核版本不低于 3.10&#xff0c; CentOS 7 满足最低内核的要求&#xff0c;所以我们在CentOS 7安装Docker。 卸载旧docker 如果之前安装过旧版本的Docker&#xff0c;可以使用下面命令…

1999-2023年上市公司年报文本数据(PDF+TXT)

1999-2023年上市公司年报文本数据&#xff08;PDFTXT&#xff09; 1、时间&#xff1a;1999-2023年 2、来源&#xff1a;上市公司年度报告 3、范围&#xff1a;A股上市公司&#xff0c;5600企业&#xff0c;6.3W份 4、格式&#xff1a;PDFTXT 5、下载链接&#xff1a; 199…

c++11新特性-lambda表达式

1. 概念 lambda表达式实际上是一个匿名类的成员函数&#xff0c;该类由编译器为lambda创建&#xff0c;该函数被隐式地定义为内联。因此&#xff0c;调用lambda表达式相当于直接调用它的operator()函数&#xff0c;这个函数可以被编译器内联优化&#xff08;建议&#xff09;。…

Ubuntu服务器时间和本地时间不一致怎么解决——Linux的Local Time和RTC time

最近一直在搞大模型的相关工作&#xff0c;所以一直在用Linux服务器&#xff0c;前面的文章里也提到了&#xff0c;我用的是一台Dell PowerEdge R730xd。 但在使用中发现&#xff0c;IDRAC中的日志时间和本地时间存在时差&#xff0c;大概相关8小时。 对于技术人员&#xff0c…

数据结构:树形结构(树、堆)详解

数据结构&#xff1a;树形结构&#xff08;树、堆&#xff09;详解 一、树&#xff08;一&#xff09;树的性质&#xff08;二&#xff09;树的种类二叉树多叉树满N叉树完全N叉树 &#xff08;三&#xff09;二叉树的实现1、二叉树结构定义2、二叉树功能实现&#xff08;1&…

windows安全中心永久卸载工具分享

使用方法 博客&#xff1a;h0ck1r丶羽~从零到一 卸载工具下载链接&#xff1a; 夸克网盘分享 一路回车&#xff0c;选项Y即可 耐心等待几秒种&#xff0c;自动重启 此时打开windows安全中心&#xff0c;已经完全不能使用了&#xff0c;响应的杀毒功能也关了 往期推荐 【渗透测…

QT做一个USB HID设备识别软件

1.下载 HidApi库&#xff1a;GitHub - yigityuce/HidApi: Human Interface Device Api (HidApi) with C 2.pro文件添加 DEFINES - UNICODE LIBS -lsetupapi 3.建立三个对象 HidApi hidApi;HidDevice hidDev;//HID设备HidDeviceList devList;//HID设备列表 4.对 HID 设备进…

JavaWeb - Spring Boot

Spring 官网​​​​​Spring | Home Spring Boot Spring Boot是一个由Pivotal团队提供的开源框架&#xff0c;旨在简化Spring应用的初始搭建以及开发过程。在Spring Boot项目中&#xff0c;通常会有Controller、Service、Mapper和Entity等层次结构。下面将详细介绍这些层次的…

用 Higress AI 网关降低 AI 调用成本 - 阿里云天池云原生编程挑战赛参赛攻略

作者介绍&#xff1a;杨贝宁&#xff0c;爱丁堡大学博士在读&#xff0c;研究方向为向量数据库 《Higress AI 网关挑战赛》正在火热进行中&#xff0c;Higress 社区邀请了目前位于排行榜 top5 的选手杨贝宁同学分享他的心得。下面是他整理的参赛攻略&#xff1a; 背景 我们…