CookieSession 学习笔记

news2025/1/18 17:01:00

1 Cookie

1.1 Cookie的基本使用

1 概念
客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据请求
2 工作流程
服务端Servlet可以将给response设置Cookie,这样浏览器接收到的数据中,就含有Cookie数据,下次请求时,会携带Coolie数据,以此来实现会话间的数据共享
3 使用方式

	Cookie cookie = new Cookie("key", "value");
    resp.addCookie(cookie);

浏览器中查看cookie
在这里插入图片描述
在另一个Servlet的doGet()方法中获取Cookie

Cookie[] cookies = req.getCookies();
for (Cookie cookie: cookies) {
    String key = cookie.getName();
    String value = cookie.getValue();

    System.out.println("key = " + key + ", value = " + value);
}

输出结果

key = JSESSIONID, value = D4A69F356FAC98B600F16EBF4C7C99BF
key = key, value = value
key = Idea-dfc854f3, value = caf432a3-c8a7-4ccd-af20-abf25269830d

1.2 Cookie原理

cookie是Request和Response中的Header
Response
在这里插入图片描述
Request
在这里插入图片描述

1.3 Cookie时效

设置Cookie存活时间

cookie.setMaxAge(60 * 60 * 24 * 7);

再请求时可以看到有效时间
在这里插入图片描述
关闭浏览器再打开时,请求servelet还会携带此cookie

1.4 cookie携带中文

在cookie的value中设置中文参数

Cookie cookie = new Cookie("username", "汤姆");

请求后,报错
在这里插入图片描述
修复方式: 使用URLEncoder.encode()方法将中文encode
示例:

String username = URLEncoder.encode("汤姆", "UTF-8");
System.out.println("username = " + username);
Cookie cookie = new Cookie("username", username);

再次请求后,控制台输出

username = %E6%B1%A4%E5%A7%86

同时,Cookie解码端也要使用UrlDecode

 String value = URLDecoder.decode(cookie.getValue(), "UTF-8");

2 Sesion

2.1 Session的使用

//获取session
HttpSession session = req.getSession();

//设置session key value
session.setAttribute(String key, String value);

//根据key取出session value
session.getAttribute(String key);

//移除session
session.removeAttribute(String key);

在SessionA的方法中设置username

HttpSession session = req.getSession();
session.setAttribute("username", "tom");

在SessionB的方法中获取username

HttpSession session = req.getSession();
String username = (String) session.getAttribute("username");
System.out.println("username = " + username);

先请求SessionA Servlet后再请求SessionB Servlet,控制台输出

username = tom

2.2 Session原理

1 Servlet中获取到的session是同一个对象

@WebServlet("/session_a")
public class SessionServletA extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        System.out.println("session = " + session);
        session.setAttribute("username", "tom");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

@WebServlet("/session_b")
public class SessionServletB extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        System.out.println("session = " + session);

        String username = (String) session.getAttribute("username");
        System.out.println("username = " + username);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

先请求SessionA再请求SessionB后,控制台输出

session = org.apache.catalina.session.StandardSessionFacade@626caf88
session = org.apache.catalina.session.StandardSessionFacade@626caf88

可以看到两个Servlet中获取到的Session是同一个对象
实现原理是请求时,客户端携带的Sessionid相同

在这里插入图片描述
在这里插入图片描述
从这也能看出,Session是基于Cookie实现的
Session在本地保存的位置没有找到

2.3 Session钝化与活化

当服务器重启后,Session还是能够正常获取到。
1 首先访问servlet_a, 在ServletA中设置Session
2 关闭tomcat,重新启动
3 再访问servlet_b,是=可以获取到在ServletA中设置的Session

Session在服务器重启后,Session数据会被保存

2.4 Session销毁

Session默认有效时间默认为30min
保存在conf/web.xml

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

也可以手动设置有效时间
手动在WEB-INF/web.xml中把有效时间改为1min

 <session-config>
    <session-timeout>1</session-timeout>
</session-config>

设置过期后,再通过session.getAttribute()获取session中保存的值将会获取不到

session = org.apache.catalina.session.StandardSessionFacade@4b0937cb
username = null

手动设置session过期

session.invalidate();

调用invalidate()方法后,再调用session.getAttribute()将会报错在这里插入图片描述

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

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

相关文章

大数据期末课设~电商网站日志数据分析

目录 一、背景介绍... 1 二、大数据平台架构设计... 2 三、大数据平台系统设计... 7 四、数据分析与达成目标... 11 五、Spark综合编程与python可视化... 33 六、总结与体会... 50 一、背景介绍 一般情况下&#xff0c;大数据平台指的是使用了Hadoop、Spark、Storm、Fli…

可交易性(tradability)检验即协整性检验:线性关系

两个时间序列的线性关系表示为&#xff1a; 左边是两个时间序列的线性组合。是协整系数。 右边是残差序列&#xff08;residual series),表示为由两部分组成。是均衡值&#xff08;equilibrium value&#xff09;&#xff0c;是一个均值为0的时间序列&#xff0c;可以构造为均…

系统 CPU 突然飙升且 GC 频繁,如何排查

处理过线上问题的同学基本上都会遇到系统突然运行缓慢&#xff0c;CPU 100%&#xff0c;以及Full GC次数过多的问题。 当然&#xff0c;这些问题的最终导致的直观现象就是系统运行缓慢&#xff0c;并且有大量的报警。 本文主要针对系统运行缓慢这一问题&#xff0c;提供该问题…

R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化

概述和定义 在本文中&#xff0c;我们将考虑一些线性模型的替代拟合方法&#xff0c;除了通常的 普通最小二乘法。这些替代方法有时可以提供更好的预测准确性和模型可解释性。最近我们被客户要求撰写关于模型选择的研究报告&#xff0c;包括一些图形和统计输出。 主成分分析P…

19. Dropout从零代码实现以及简洁实现

1. 从零实现 要实现单层的暂退法函数&#xff0c; 我们从均匀分布U[0,1]中抽取样本&#xff0c;样本数与这层神经网络的维度一致。 然后我们保留那些对应样本大于p的节点&#xff0c;把剩下的丢弃。 在下面的代码中&#xff0c;我们实现 dropout_layer 函数&#xff0c; 该函…

【统一融合:U2Fusion】

U2Fusion: A Unified Unsupervised Image Fusion Network &#xff08;U2Fusion&#xff1a;一种统一的无监督图像融合网络&#xff09; 研究提出了一种新颖的统一监督和管理端到端图像融合网络,称为U2Fusion,能够解决不同的融合问题,包括多模态,多曝光,和多聚焦融合。利用特征…

网络0323和网络2303分类过程的比较

( A, B )---2*30*2---( 1, 0 )( 0, 1 ) 用网络分类A和B&#xff0c;让A是&#xff08;0&#xff0c;0&#xff09;&#xff08;1&#xff0c;1&#xff09;&#xff0c;让B是&#xff08;1&#xff0c;0&#xff09;&#xff08;1&#xff0c;1&#xff09;。测试集均为&#…

MySQL学习记录(8)MySQL锁

5、锁 5.1、概述 ​ 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、 RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有 效性是所有数据库必…

数字经济2023前瞻

判断1:“超个性化”已成数字化核心诉求 判断2:瞄准“既要又要还要”,业务与技术逼近“同心圆” 判断3:数据要素市场化配置的序幕拉开 判断4:产业数字化技术开源,打造深水区的群智协同平台 判断5:传统龙头企业的数字化“溢出”,实现赚钱传承双丰收 判断6:工业互联网将成…

Python学习----property属性上下文管理器生成器深拷贝浅拷贝正则表达式

property属性 property 属性就是负责把类中的一个方法当作属性使用&#xff0c;这样可以简化代码使用。 定义property属性有两种方式 1、装饰器方式 2、类属性方式 装饰器方式&#xff1a; 原本私有属性&#xff0c;我们不能直接访问&#xff0c;只能通过方法简介进行访问。…

网络安全观察报告 惯犯观察

执行摘要 从 1987 年 9 月 14 日&#xff0c;中国向世界发出第一封电子邮件到如今&#xff0c;中国的互联网发展已过去整整 31 个年头。从消费互联、产业互联到万物互联&#xff0c;互联网正在加速改变我们的交流方式和交易方式&#xff0c;一次次 004.重塑了国家的经济形态和…

[附源码]Python计算机毕业设计宠物用品购物网站Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

springboot+vue基本微信小程序的校园二手物品交易平台系统

在大学校园里&#xff0c;存在着很多的二手商品&#xff0c;但是由于信息资源的不流通以及传统二手商品信息交流方式的笨拙&#xff0c;导致了很多仍然具有一定价值或者具有非常价值的二手商品的囤积&#xff0c;乃至被当作废弃物处理。现在通过微信小程序的校园二手交易平台&a…

系统集成项目管理工程师2022年下半年广东卷下午案例分析题及答案

本系列文章将会对系统集成项目管理工程师考试中出现的各类案例分析题进行汇总解析&#xff0c;并给出分析过程&#xff0c;帮助考生备考复习。 更多复习内容请在微信搜索小程序 “系统集成项目管理工程师高频考点”。 1、A公司承接了一个信息系统开发项目&#xff0c;任命小安…

【现代机器人学】学习笔记四:一阶运动学与静力学

这节课的内容主要讲速度的正向运动学&#xff08;也就是位置的一阶导数&#xff0c;所以叫一阶运动学&#xff09;和静力学&#xff0c;这也是本书首次出现动力学相关的内容&#xff08;刚体运动那节提到的力旋量算是一个概念的介绍&#xff09;。 个人结合平时的工程项目看&a…

【DeepFuse:无监督用于与极端曝光图像】

DeepFuse: 一种深度无监督的方法&#xff0c;用于与极端曝光图像对进行曝光融合 DeepFuse: A Deep Unsupervised Approach for Exposure Fusion with Extreme Exposure Image Pairs 传统手工进行的MEF&#xff08;多曝光融合&#xff09;&#xff0c;对输入条件变化大的鲁棒性…

算法6.7BFS 算法6.8-6.9最小生成树

一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2022.12.10 Last edited: 2022.12.11 目录 算法6.7BFS 第1关&#xff1a;算法6.7 BFS 任务描述 相关知识 编程要求 输入输出说明 测试说明…

[论文解析] Diffusion Models Beat GANs on Image Synthesis

code link: https://github.com/openai/guided-diffusion. 文章目录OverviewWhat problem is addressed in the paper?What is the key to the solution?What is the main contribution?Potential fundamental flaws; how this work can be improved?ContentsDiffusion mod…

web前端期末大作业:基于html化妆品购物商城项目的设计与实现——化妆品官方网站设计与实现(HTML+CSS+JS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【cocos源码学习】cocos2d-x-4.0 Android Demo工程结构的简析

说明 使用cocos new创建的Android工程&#xff0c;并对其进行简单的结构分析 Android工程结构 基于gradle构建的Android工程是于模块来组织的&#xff0c;工程根目录本身是一个主模块&#xff0c;其它为子模块&#xff0c;每个模块都有一个build.gradle文件&#xff0c;主模…