服务器端会话技术-Session

一、Session

1.1 概述和快速入门

概述:Session 是服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中

快速入门

  1. 获取 HttpSession 对象
  2. 使用 HttpSession 对象

常用方法

方法作用
HttpSession request.getSession()通过 request 对象获取 HttpSession 对象
Object getAttribute(String name)根据名称 获取属性值
void setAttribute(String name , Object value)设置 键值对在 Session 域中
void removeAttribute(String name)根据名称 移除键值对

1.2 Session 实现原理

Session 的实现是依赖于 Cookie 的。

服务器如何确保在一次会话范围内,多次获取的 Session 对象都是同一个呢?

  1. 使用 Cookie:服务器可以在客户端浏览器中设置一个唯一标识的 Cookie 对象,用于标识用户的会话。当客户端发起请求时,服务器可以根据该 Cookie 对象来识别用于的会话,并返回相应的 Session 对象
  2. URL 重写:服务器可以在每个页面的 URL 中添加一个唯一的会话标识符,以便在客户端发送请求时识别用户的会话,这样可以确保每次请求都能获取到相同的 Session 对象
  3. 隐藏表单字段:服务器可以在每个页面的表单中添加一个隐藏字段,用于存储会话标识符,当客户端提交表单时,服务器可以根据该字段来识别用户的会话,并返回相应的 Session 对象

1.3 Session 细节

1、当客户端关闭后,服务器不关闭,两次获取 Session 是否为同一个?

  • 默认情况下,不是,但是我们可创建 Cookie 键为 JSESSIONID,并设置最大存活时间,让 Cookie 持久化保存

    // 创建 Cookie 对象并存储唯一标识
    Cookie cookie = new Cookie("JSESSIONID",session.getId());
    // 设置 Cookie 对象的存活时间为 1个小时
    cookie.setMaxAge(60*60);
    // 响应数据,发送 Cookie 对象
    response.addCookie(cookie);
    

2、客户端不关闭,服务器关闭后,两次获取 Session 是否为同一个?

  • 不是同一个,但是要确保数据不丢失,tomcat 自动完成以下工作(IDEA无法实现)
    • Session 的钝化:在服务器正常关闭之前,将 Session 对象系列化到硬盘上
    • Session 的活化:在服务器启动后,将 Session 文件转化为内存中的 Session 对象即可

3、 Session 什么时候被销毁?

  • 服务器关闭
  • Session 对象调用 invalidate() 方法
  • Session 对象默认失效时间为 30 分钟

1.4 Session 特点

  • Session 对象用于存储一次会话的多次请求的数据,存储在服务器端

  • Session 对象可以存储任意类型,任意大小的数据

1.5 Session 和 Cookie 的区别

  1. Session 存储数据在服务器端,Cookie 存储数据在客户端浏览器中
  2. Session 没有数据大小的限制,而 Cookie 有数据大小限制
  3. Session 数据安全,Cookie 数据相对于来说不安全

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

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

相关文章

图像处理常用算法介绍

此篇简单回顾下图像处理领域常用到的一些算法,这边只对每个知识点重要的点做一些记录,便于快速的知其形,会其意。 一. SIFT(Scale-Invariant feature transform)特征 重点是了解DOG(Difference of Gaussian)高斯差分图像是如何生…

ubuntu离线安装k8s

目录 一、前期准备 二、安装前配置 三、安装docker 四、安装cri-dockerd 五、部署k8s master节点 六、整合kubectl与cri-dockerd 七、网络等插件安装 八、常见问题及解决方法 一、前期准备 ①ubuntu系统 本地已安装ubuntu系统,lsb_release -a命令查看版本信…

2024网络安全学习路线,最全保姆级教程,学完直接拿捏!

关键词: 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊,学习网络安全方向通常会有哪些问题 前排提示:文末有CSDN独家网络安全资料包! 1、打基础时间太长 学基础花费很长时间,光语言都…

Windows10安装PCL1.14.0及点云配准

一、下载visual studio2022 下载网址:Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 安装的时候选择"使用C的桌面开发“,同时可以修改文件路径,可以放在D盘。修改文件路径的时候,共享组件、…

Open CASCADE学习|拉伸

目录 1、沿方向拉伸 2、沿路径拉伸 3、变形拉伸 1、沿方向拉伸 #include <Geom_CylindricalSurface.hxx> #include <gp_Ax3.hxx> #include <GeomAPI_Interpolate.hxx> #include <BRepAdaptor_Curve.hxx> #include <BRepBuilderAPI_MakeEdge.hxx&…

追觅发布多款旗舰新品,双机械臂扫地机器人X40领衔登场

2月2日&#xff0c;追觅科技全球首创仿生“双”机械臂新品发布会在苏州举行。会上&#xff0c;追觅科技中国区总裁郭人杰分享了追觅科技全球化发展的业绩成果。郭人杰称&#xff0c;2019-2023年&#xff0c;追觅科技5年复合年增长率超过100%&#xff0c;增速领跑智能清洁行业&a…

LeetCode、746. 使用最小花费爬楼梯【简单,动态规划 线性DP】

文章目录 前言LeetCode、746. 使用最小花费爬楼梯【简单&#xff0c;动态规划 线性DP】题目与分类思路 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。…

C语言——教师信息管理系统

1.教师信息添加.h void InputTeacher() {int c 0;system("cls");printf("\t\t*************************************************\n");printf("\t\t******** 欢迎来到教师信息添加系统 **********\n");printf("\t\t***************…

python的进程,线程、协程

python进程的实现 #coding:utf-8 from multiprocessing import Process import timedef run(name):print(%s is running % name)time.sleep(3)print(%s finished his run % name)if __name__ __main__:p Process(targetrun, args(XWenXiang,)) # 创建一个进程对象p.start()…

Luogu P3388 【模板】割点(割顶) 题解 Tarjan/割点

题目链接&#xff1a;Luogu P3388 【模板】割点&#xff08;割顶&#xff09; 题目描述&#xff1a; 给定一张无向图&#xff0c;输出割点个数以及割点编号。 割点的定义&#xff1a;删除一个点及其连接的边后&#xff0c;若能使图的联通块数量增加&#xff0c;那么被删除的这个…

怎么在bash shell中操作复杂json对象

怎么在bash shell中操作复杂json对象 在bash shell中操作复杂JSON对象&#xff0c;jq可以帮助我们在bash环境下轻松地处理这类数据&#xff0c;本文将详细介绍如何使用jq在bash中操作复杂的JSON对象。 jq是一个轻量级且灵活的命令行JSON处理器&#xff0c;它允许你以非常高效的…

学习数据结构和算法的第3天

常数循环的复杂度 计算Func4的时间复杂度 voidFunc4(int N) { int count 0; for (int k 0; k < 100; k) { count; } printf("%d\n", count); }O&#xff08;1&#xff09; 不是代表算法运行一次&#xff0c;是常数次 strchar的时间复杂度 #include<stdi…

k8s版本升级到1.24.x

每个版本升级都有对应的文档,以1.23升级到1.24为例。 1.24.6版本后,k8s不再依赖于docker。需要先切换到使用containerd。 可以查看栏目的k8s安装文档。 确定要升级到哪个版本 使用操作系统的包管理器找到最新的补丁版本 Kubernetes 1.24: yum list --showduplicates kub…

Redis(十二)Bigkey

文章目录 游标案例生成100万测试数据key生产上限制keys */flushdb/flushall等危险命令不使用keys *&#xff1a;scan Biigkey案例多大算大发现bigkey渐进式删除生产调优示例问题 游标案例 生成100万测试数据key shell: for((i1;i<100*10000;i)); do echo "set k$i v…

Nicn的刷题日常之调整奇数偶数顺序

目录 1.题目描述 2.解题思路 3.解题 1.题目描述 输入一个整数数组&#xff0c;实现一个函数&#xff0c; 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c; 所有偶数位于数组的后半部分。 2.解题思路 1. 给定两个下标left和right&#xff…

编程笔记 html5cssjs 073 JavaScript Object数据类型

编程笔记 html5&css&js 073 JavaScript Object数据类型 一、创建 Object二、Object 类型的属性与方法三、示例四、参考小结 JavaScript 中的 Object 数据类型是该语言中最复杂也最灵活的数据类型之一&#xff0c;它是其他所有内置对象和用户自定义对象的基础。在 JavaS…

网课:机器翻译——牛客(题解)

题目描述 小晨的电脑上安装了一个机器翻译软件&#xff0c;他经常用这个软件来翻译英语文章。 这个翻译软件的原理很简单&#xff0c;它只是从头到尾&#xff0c;依次将每个英文单词用对应的中文含义来替换。对于每个英文单词&#xff0c;软件会先在内存中查找这个单词的中文含…

手拉手spring-boot-starter-mail实现发送QQ邮箱

技术栈 springbootmybatis-plusmysql 软件 版本 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1 mybatis-plus 3.5 spring-boot-starter-mail Springboot版本 spring boot对mail的封装支持非常好&#xff0c;方便&#xff0c;几行代码就可以把邮件集成进来…

5 个 JavaScript 代码优化技巧

在本文中&#xff0c;将介绍 5 个代码优化的技巧&#xff0c;有助于编写更高效、更优雅的代码。这些技巧包括使用扩展运算符简化代码到使用 async/await 处理异步代码等。 1. 使用扩展运算符解构对象和数组 扩展运算符由三个点 ... 表示&#xff0c;可用于对象和数组的解构。…

调用Gensim库训练Word2Vec模型

一、前期工作&#xff1a; 1. 安装Gensim库 pip install gensim 2.安装chardet库 pip install chardet 3. 对原始语料分词 选择《人民的名义》的小说原文作为语料&#xff0c;先采用jieba进行分词 import jieba import jieba.analyse import chardet jieba.suggest_freq…