【JavaWeb】Cookie、Session

news2024/11/13 21:58:18

文章目录

  • 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.coloradmin.cn/o/2096192.html

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

相关文章

Mysql性能优化之自适应索引

自适应索引 是什么 自适应哈希索引是 InnoDB 存储引擎为了提高特定类型查询性能而自动构建的一种内存中的哈希索引结构。它可以根据查询模式和数据访问频率自动调整,以优化数据库的性能。 与BTree的区别 与传统的 B-tree 索引不同,哈希索引使用哈希函…

基于Java的旅游服务管理系统的设计与实现(论文+源码)_kaic

摘 要 伴随着人们生活水平的提高,服务行业也得到了飞速发展。人们对旅游活动也越来越重视。很多旅游爱好者以及生活压力过大的人都会选择周末,节假日或自己休闲时外出旅游,换种环境来放松心情,缓解工作压力,尽享别样生…

GHA文章是AI文章吗?

对于想做外贸的客户来说,谷歌SEO成为了每个网站的必攻课题,而在SEO策略中,内容质量至关重要,而现在,ai产业的发达也让不少人看见出海的希望,因为内容可以让ai生成,那么,现在火爆seo圈…

Leetcode199二叉树的右视图(java实现)

今天我们分享的题目是199题,题目描述如下: 那么本道题的解题思路呢就是使用层序遍历,每次将每层中的最后一个元素加入到我们的集合中。 本道题目和之前的层序遍历二叉树的题目很像,但是需要注意的细节。那么我会在代码中指出。 代…

JSON处理库 -- Fastjson

文章目录 一、json格式1.1 用途1.2 语法1.3 常见格式 二、fastjson常用类2.1 JSONObject2.2 JSONArray 三、序列化和反序列化3.1 默认序列化与反序列化3.2 序列化的扩展3.3 自定义序列化SerializeFilter3.4 JSONField 注解3.5 复习Jackson 一、json格式 1.1 用途 一种轻量级的…

SpringBoot3集成Spring Authorization Server和Spring Cloud Gateway实现网关统一认证

1. 概述 在微服务开发过程中,通常都会使用Spring Cloud Gateway构建统一的API网关,在访问微服务之前都会先校验访问者是否有权限访问资源,实现方式有很多,这里主要介绍Spring Cloud Gateway集成OAuth2.1如何实现网关统一认证。 S…

公众号里的产品宣传册是如何制作的?

​随着微信的普及,越来越多的企业和个人开始关注公众号,希望通过这个平台宣传自己的产品和服务。然而,你是否想过,那些公众号里精美的产品宣传册是如何制作出来的呢?今天,就让我来带你了解公众号产品宣传册…

解决maven中阿里云镜像仓库无法下载源码的问题

解决 Sources not found for: org.springframework.kafka:spring-kafka:3.2.3 的问题 我们在写代码的时候,经常需要看源码,但是当我们在 idea 中下载源码的时候,提示我们: Sources not found for: org.springframework.kafka:sp…

EmguCV学习笔记 C# 7.2 特征点检测

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

两个月冲刺软考——求解关系模式达到了第几范式题型(例题+讲解,一看就会)

目录 1.假设一对多联系不转换为一个独立的关系模式的话,那么生成的关系模式应该是将“一”的那一方的主键加入到“多”的一方的关系模式中。 2.求解关系模式达到了第几范式题型 1.假设一对多联系不转换为一个独立的关系模式的话,那么生成的关系模式应该…

10 款企业级项目管理系统是你理想中的那一款吗

市面上主流的 10 款企业级项目管理系统推荐:PingCode、Worktile、泛微 e-office、致远OA、Gitee、Asana、Trello、Basecamp、Monday.com、Smartsheet。 在选择合适的企业内部项目管理系统时,许多企业面临着如何找到一个既能满足当前需求,又能…

【生日视频制作】一群美女游轮船挥手AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程一群美女游轮船挥手AE模板修改文字生成器素材 怎么如何做的【生日视频制作】一群美女游轮船挥手AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

24年一级消防工程师报名流程图解(建议电脑)

报考流程: 1、登录中国人事考试网,点击网上报名,登录帐户和密.码,找到“一级消防工程师”的报考入口,选择报考省份,进入在线报名界面。 2、报考人员阅读《承诺制告知书》和《报名须知》后,点击“…

【精选】基于Python的电影推荐系统的设计与实现(全网第一无二,最新定制)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

后台框架-统一异常管理

搭建后台框架全局异常管理是一个很重要的部分,好在SpringBoot提供了很好的处理方法 使用ControllerAdvice ControllerAdvice是Spring MVC中的一个全局异常处理注解,它允许在一个地方集中处理所有控制器抛出的异常。通过使用ControllerAdvice&#xff0…

资源不是问题,网盘搜索神器!极空间部署聚合搜索工具『爱盼』

资源不是问题,网盘搜索神器!极空间部署聚合搜索工具『爱盼』 哈喽小伙伴们好,我是Stark-C~ 经常分享一些NAS的玩法和攻略,但是被问及最多的还是资源问题,我在那里下载啊?我在那里看啊?等等...…

LLM系列 | 36:Google最新开源大模型:Gemma 2介绍及其微调(下篇)

引言 环境安装 数据准备 下载 处理 模型训练 模型inference 结果 gemma-2-9b gemma-2-9b-it 引言 低头观落日,引手摘飞星。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖黑神话的小女孩。本文紧接前文Google最新开源大…

HarmonyOS NEXT未成年人模式无缝联动所有应用,过滤非适龄内容

背景 随着消费电子产品和移动互联网的普及,未成年人互联网普及率96.8%,超过80%的未成年人都拥有自己的上网设备,而如何引导孩子正确上网一直是家长们的担忧。市场上很多电子设备、系统推出了一些未成年人管控能力,却需要家长到各…

前端技术(六)—— AJAX详解

一、原生 AJAX 1. AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。 通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。 AJAX 不是新的编程语言,而是一种将现有的标准组…

【练习3】点击消除

地址:点击消除_牛客题霸_牛客网 (nowcoder.com) 分析: 消除的是“相邻且相等”的数,可以考虑用栈。这里使用StringBuilder来代替栈,好处是StringBuilder可以实现尾插和尾删的操作。 public class Main {public static void main(S…