SpringBoot创建Cookie工具类实现Cookie的:写入、读取、删除

1、什么是 Cookie

Cookie 是网站服务器发送到客户端(通常是浏览器)的一小段数据,用于在客户端存储用户信息,以便在用户再次访问网站时提供更好的体验。当用户在浏览器中访问某个网站时,服务器可能会在用户的计算机上创建一个 Cookie。这个 Cookie 包含了服务器的某些信息,如用户的登录状态、个性化设置等。当用户再次访问该网站时,浏览器会自动将这些 Cookie 发送给服务器,服务器通过读取这些信息来识别用户并提供相应的服务。

1.1 Cookie 的用途

用户身份识别:通过 Cookie 可以标识和识别用户,帮助网站记住用户的登录状态和个性化设置。

购物车和购买记录:在网上购物时,Cookie 可以跟踪用户添加到购物车中的商品和购买记录,确保购物过程的连续性和方便性。

网站分析和统计:网站使用 Cookie 来收集匿名的用户访问数据,如访问次数、页面浏览量、用户行为等,以用于网站的分析和优化。

广告定向:一些广告商使用 Cookie 来跟踪用户在网上的活动,从而投放更加相关和个性化的广告。

网站功能优化:Cookies 还可以用于网站功能的优化,例如记住用户选择的语言、地区等。

1.2 安全性与隐私

安全性:Cookie 本身并不包含病毒或恶意软件,但它们可以被用于跟踪用户的在线活动,从而可能引发隐私泄露的风险。因此,使用 Cookie 时需要谨慎处理用户数据,并遵守相关的隐私政策和法律法规。

隐私保护:为了保护用户的隐私,许多浏览器都提供了清除 Cookie 的功能。用户可以随时选择删除计算机上的 Cookie,以避免个人信息被泄露或滥用。 

2、创建 Cookie 工具类

在 SpringBoot 项目中,后端需要经常操作 Cookie 对象,所有创建 Cookie 工具类可以提高开发效率。

创建  CookieUtil 类(Cookie公共方法类):

package com.pjb.ems.util;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Cookie公共方法类* @author pan_junbiao**/
public class CookieUtil
{/*** 写入 Cookie 对象* 过期时间(单位为秒):-1:负数永不过期;0:则立马过期*/public static void writeCookie(String name, String value, int maxAge, HttpServletResponse response){Cookie cookie = new Cookie(name, value);cookie.setMaxAge(maxAge);      // 设置过期时间(单位为秒)cookie.setDomain("127.0.0.1"); // 设置域名,实现跨域功能cookie.setPath("/");response.addCookie(cookie);}/*** 读取 Cookie 的值*/public static String readCookie(String name, HttpServletRequest request){String value = null;Cookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0){for (Cookie cookie : cookies){if (name.equals(cookie.getName())){value = cookie.getValue();break;}}}return value;}/*** 删除 Cookie 对象*/public static void deleteCookie(String name, HttpServletRequest request, HttpServletResponse response){Cookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0){for (Cookie cookie : cookies){if (name.equals(cookie.getName())){cookie.setMaxAge(0); // 设置有效时间为0秒的时候:创建完cookie后,则立马过期(删除);cookie.setPath("/");response.addCookie(cookie);}}}}
}

3、知识补充

在 SpringBoot 项目中,后端如何获取 HttpServletRequest、HttpServletResponse 和 HttpSession 对象?

 SpringBoot 如何获取 HttpServletRequest、HttpServletResponse 和 HttpSession 对象:

详细方法,请求点击浏览文章:《SpringMVC获取HttpServletRequest、HttpServletResponse和HttpSession对象的3种方法》

后端代码,可以通过ServletRequestAttributes对象。

/*** 获取信息** @author pan_junbiao*/
@RequestMapping(value = "/getInfo")
public void getInfo()
{//获取ServletRequestAttributes对象ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());//获取HttpServletRequest对象HttpServletRequest request = servletRequestAttributes.getRequest();//获取HttpServletResponse对象HttpServletResponse response = servletRequestAttributes.getResponse();//获取HttpSession对象HttpSession session = servletRequestAttributes.getRequest().getSession();//忽略其他代码...
}

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

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

相关文章

Nginx Spring boot指定域名跨域设置

1、Nginx配置跨域: server {listen 80;server_name your-backend-service.com;location / {proxy_pass http://localhost:8080; # Spring Boot应用的内部地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-F…

android wifi扫描的capability

混合型加密android11 8155与普通linux设备扫描到的安全字段差别 android应用拿到关于wifi安全的字段: systembar-WifiBroadcastReceiver---- scanResult SSID: Redmi_697B, BSSID: a4:39:b3:70:8c:20, capabilities: [WPA-PSK-TKIPCCMP][WPA2-PSK-TKIPCCMP][RSN-PSK…

数据结构-二叉搜索树(Java语言)

目录 1.概念 2.查找search 3.插入insert ​编辑4.删除remove(难点) 5.性能分析 1.概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树 : 1.若它的左子树不为空,则左子树上所有节点的值都…

传奇996_22——自动挂机

登录钩子函数中执行 callscript(actor, "../QuestDiary/主界面基础按钮/主界面基础按钮QM", "基础按钮QM")基础按钮QM执行了已下代码 #IF Equal <$CLIENTFLAG> 1 #ACT goto PC端面板加载#IF Equal <$CLIENTFLAG> 2 #ACT goto 移动端面板加载…

学习笔记:黑马程序员JavaWeb开发教程(2024.11.18)

9.8 Mybatis-基础操作-查询&#xff08;条件查询&#xff09; 需要模糊查询&#xff0c;根据要求&#xff0c;我们需要在关键词前后都加上%&#xff0c;但是我们不能使用‘%#{内容}%’的形式&#xff0c;因为#{内容}最终会变成?&#xff0c;而?不能放在‘’之中&#xff…

数据分析-48-时间序列变点检测之在线实时数据的CPD

文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 实时数据CPD3.1 SDAR学习算法3.2 Changefinder模块3.3 恒定方差CPD3…

学习大数据DAY61 宽表加工

目录 模型设计 加工宽表 任务调度&#xff1a; 大表 - 把很多数据整合起来 方便后续的明细查询和指标计算 模型设计 设计 建模 设计: excel 文档去编写 建模: 使用建模工具 PowerDesigner Navicat 在线画图工具... 把表结构给绘 制出来 共享\项目课工具\pd 加工宽表 数…

C#.Net筑基-模式匹配汇总

01、模式匹配概述 从C#7开始支持的 模式匹配 语法&#xff08;糖&#xff0c;挺甜&#xff09;&#xff0c;可非常灵活的对数据进行条件匹配和提取&#xff0c;经过多个版本的完善&#xff0c;已经非常强大了。 C# 支持多种模式&#xff0c;包括声明、类型、常量、关系、属性…

Python蓝桥杯刷题1

1.确定字符串是否包含唯一字符 题解&#xff1a;调用count函数计算每一个字符出现的次数&#xff0c;如果不等于1就输出no&#xff0c;并且结束循环&#xff0c;如果等于1就一直循环直到计算到最后一个字符&#xff0c;若最后一个字符也满足条件&#xff0c;则输出yes import…

Javascript进阶——面试常见

以下是对前端JS面试题的详细回答&#xff1a; 1. 对 fetch 的理解及其优缺点 fetch 是一个基于 Promise 的&#xff0c;用于浏览器和服务器之间进行数据交换的 API。它提供了一个简洁的接口来请求资源。 优点&#xff1a; 语法简洁&#xff1a;fetch 的语法更加简洁&#x…

Unity类银河战士恶魔城学习总结(P127 Stat ToolTip属性提示)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了把鼠标放到属性上面就会显示属性的作用 UI_StatToolTip.cs 这段代码实现了一个UI提示框&#xff08;ToolTip&#xff09;功能…

计算机编程中的事件驱动编程模型及其在构建响应式用户界面中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的事件驱动编程模型及其在构建响应式用户界面中的应用 计算机编程中的事件驱动编程模型及其在构建响应式用户界面中…

django-ninja 实现cors跨域请求

要在Django-Ninja项目中实现跨域&#xff08;CORS&#xff09;&#xff0c;你可以使用django-cors-headers库&#xff0c;这是一个专门用于处理跨域资源共享&#xff08;CORS&#xff09;问题的Django应用程序。以下是具体的步骤和配置&#xff1a; 安装依赖&#xff1a; 使用p…

ROS第九梯:ROS+VSCode+Python+C++自定义消息发布和订阅

首先,Python版本的ROS项目和C++版本的ROS项目前期创建功能包的步骤基本一致,具体可参考第二章。 费一步:新建msg文件 在功能包(data_input)目录下创建一个msg文件夹,并在msg文件夹下创建一个名为Box的msg文件,具体如下图所示: 该msg文件为一个用于描述3D Box的文件,…

selenium元素定位---元素点击交互异常解决方法

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、异常原因 在编写ui自动化时&#xff0c;执行报错元素无法点击&#xff1a;ElementClickInterceptedException 具体报错&#xff1a;selenium.common.exc…

Front Panel Window Bounds 与 Front Panel Window Bounds 的区别与应用

在LabVIEW中&#xff0c;Front Panel Window Bounds 和 Front Panel WindowBounds 是两个不同的属性节点&#xff0c;用于描述前面板窗口的位置和大小。它们的区别主要体现在它们表示的是窗口的不同部分&#xff0c;具体如下&#xff1a; 1 Window Bounds&#xff1a;调整整个…

H.265流媒体播放器EasyPlayer.js播放器出现加载视频等待画面时长过长的原因排查

在数字媒体时代&#xff0c;用户体验是衡量播放器性能的关键指标之一。EasyPlayer.js网页web无插件播放器作为一款流行的Web视频播放器&#xff0c;其加载速度和响应时间直接影响着用户的观看体验。 1、问题描述 加载视频等待画面时长过长。 2、可能的原因&#xff1a; 检查下…

计算机网络-MSTP基础实验一(单域多实例)

前面我们已经大致了解了MSTP的基本概念和工作原理&#xff0c;但是我自己也觉得MSTP的理论很复杂不结合实验是很难搞懂的&#xff0c;今天来做一个配套的小实验以及一些配置命令。 一、网络拓扑 单域多实例拓扑 基本需求&#xff1a;SW1为VLAN10的网关&#xff0c;SW2为VLAN20的…

大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

windows系统中实现对于appium的依赖搭建

Node.js&#xff1a;Appium是基于Node.js的&#xff0c;因此需要安装Node.js。可以从Node.js官网下载并安装。 Java Development Kit (JDK)&#xff1a;用于Android应用的自动化测试&#xff0c;需要安装JDK。可以从Oracle官网下载并安装。 Android SDK&#xff1a;进行Andro…