java中session各种使用场景实例,这篇文章就够了。
目录
- java原生使用Session详解
- 什么是Session
- Session的使用
- Session的配置
- Session的安全性
- 总结
- SpringCloud中使用session详解
- 1. 添加依赖
- 2. 配置Redis
- 3. 配置Session
- 4. 使用Session
- 5. Session超时时间
- 6. Session共享
- 7. Session序列化
- 8. 总结
- Spring Boot中Session使用详解
- Spring Boot中Session的实现
- 1. 使用HttpServletRequest对象
- 2. 使用@SessionAttributes注解
- Session的配置
- Session的使用场景
- 1. 用户登录状态管理
- 2. 购物车管理
- 3. 表单数据的临时存储
- 总结
- Java SSM框架中Session使用详解
- Session的使用
- 1. 获取Session对象
- 2. 向Session中存储数据
- 3. 从Session中获取数据
- 4. 从Session中删除数据
- 5. 设置Session的过期时间
- 6. Session的监听器
- 总结
java原生使用Session详解
什么是Session
Session是Web应用程序中的一种机制,用于存储用户的会话信息。在用户访问Web应用程序时,服务器会为每个用户创建一个Session对象,用于存储该用户的会话信息,例如登录状态、购物车信息等。
Session对象是一个键值对的集合,可以通过键来获取对应的值。Session对象的生命周期与用户的会话周期相同,当用户关闭浏览器或者超过一定时间没有操作时,Session对象会被销毁。
Session的使用
在Java中,可以通过HttpServletRequest对象来获取Session对象。例如:
HttpSession session = request.getSession();
通过getSession()方法获取Session对象,如果当前请求中不存在Session对象,则会创建一个新的Session对象。如果存在Session对象,则返回已有的Session对象。
可以通过setAttribute()方法向Session对象中添加属性,例如:
session.setAttribute("username", "张三");
通过getAttribute()方法获取Session对象中的属性,例如:
String username = (String) session.getAttribute("username");
可以通过removeAttribute()方法删除Session对象中的属性,例如:
session.removeAttribute("username");
Session的配置
Session的配置可以在web.xml文件中进行。以下是一个示例:
<session-config><session-timeout>30</session-timeout><cookie-config><name>SESSIONID</name><path>/</path><http-only>true</http-only></cookie-config>
</session-config>
其中,session-timeout用于设置Session的超时时间,单位为分钟。cookie-config用于设置Session的Cookie属性,例如Cookie的名称、路径、是否只能通过HTTP访问等。
Session的安全性
Session中存储的信息可能包含用户的敏感信息,因此需要注意Session的安全性。以下是一些常见的Session安全问题:
- Session劫持:攻击者通过某种方式获取了用户的Session ID,从而可以伪造Session对象,访问用户的会话信息。
- Session固定攻击:攻击者通过某种方式获取了用户的Session ID,然后将该Session ID设置为自己的Session ID,从而可以访问用户的会话信息。
- Session泄露:Web应用程序中存在漏洞,导致Session信息被泄露。
为了提高Session的安全性,可以采取以下措施:
- 使用HTTPS协议,防止Session ID被窃取。
- 设置Session ID的Cookie属性,例如只能通过HTTP访问、设置HttpOnly属性等。
- 避免在Session中存储敏感信息,例如密码等。
- 定期清理Session对象,避免Session对象过多导致内存溢出。
总结
Session是Web应用程序中的一种重要机制,用于存储用户的会话信息。在Java中,可以通过HttpServletRequest对象来获取Session对象,并通过setAttribute()、getAttribute()、removeAttribute()等方法来操作Session对象。为了提高Session的安全性,需要注意Session劫持、Session固定攻击、Session泄露等问题,并采取相应的措施来保护Session的安全。
SpringCloud中使用session详解
在分布式系统中,Session管理是一个非常重要的问题。Spring Cloud提供了一种基于Redis的Session管理方案,可以有效地解决Session共享的问题。本文将介绍如何在Spring Cloud中使用Redis来管理Session。
1. 添加依赖
在pom.xml文件中添加以下依赖:
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>
2. 配置Redis
在application.yml文件中添加以下配置:
spring:redis:host: localhostport: 6379
3. 配置Session
在Spring Boot的启动类上添加@EnableRedisHttpSession注解,开启Spring Session支持:
@SpringBootApplication
@EnableRedisHttpSession
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
4. 使用Session
在Controller中可以直接使用HttpServletRequest对象来获取Session:
@RestController
public class TestController {@GetMapping("/test")public String test(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute("key", "value");return session.getAttribute("key").toString();}
}
5. Session超时时间
默认情况下,Spring Session的Session超时时间为1800秒。可以通过以下配置来修改超时时间:
server:servlet:session:timeout: 3600
6. Session共享
在分布式系统中,多个服务之间需要共享Session。Spring Session提供了一种基于Redis的Session共享方案。只需要在每个服务中配置相同的Redis地址即可实现Session共享。
7. Session序列化
默认情况下,Spring Session使用JDK自带的序列化方式来序列化Session。但是,JDK自带的序列化方式存在一些问题,比如序列化后的数据过大、序列化性能较差等。因此,建议使用更高效的序列化方式,比如JSON序列化、Protobuf序列化等。可以通过以下配置来修改序列化方式:
@Configuration
public class SessionConfig {@Beanpublic RedisSerializer<Object> springSessionDefaultRedisSerializer() {return new GenericJackson2JsonRedisSerializer();}
}
8. 总结
本文介绍了在Spring Cloud中使用Redis来管理Session的方法。通过配置Redis,开启Spring Session支持,即可实现Session共享。同时,还介绍了如何修改Session超时时间和Session序列化方式。
Spring Boot中Session使用详解
Spring Boot中Session的实现
Spring Boot中Session的实现依赖于Servlet容器,如Tomcat、Jetty等。Servlet容器提供了一个名为HttpSession的接口,用于在Web应用程序中管理Session。
Spring Boot中可以通过以下两种方式来使用Session:
1. 使用HttpServletRequest对象
在Spring Boot中,可以通过HttpServletRequest对象来获取Session。具体代码如下:
@RequestMapping("/test")
public String test(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute("name", "张三");return "test";
}
在上面的代码中,我们通过HttpServletRequest对象获取了Session,并将一个名为“name”的属性设置为“张三”。
2. 使用@SessionAttributes注解
除了使用HttpServletRequest对象来获取Session外,Spring Boot还提供了一个更加方便的方式,即使用@SessionAttributes注解。具体代码如下:
@Controller
@SessionAttributes("name")
public class TestController {@RequestMapping("/test")public String test(Model model) {model.addAttribute("name", "张三");return "test";}@RequestMapping("/test2")public String test2(Model model) {String name = (String) model.asMap().get("name");return "test2";}
}
在上面的代码中,我们在TestController类上使用了@SessionAttributes注解,并指定了一个名为“name”的属性。在test方法中,我们将“name”属性设置为“张三”,并返回一个名为“test”的视图。在test2方法中,我们通过Model对象获取了“name”属性的值,并返回一个名为“test2”的视图。
需要注意的是,@SessionAttributes注解只能用于控制器类上,不能用于控制器方法上。
Session的配置
在Spring Boot中,可以通过application.properties文件来配置Session。具体配置如下:
# Session超时时间(单位:秒)
server.servlet.session.timeout=1800# Session Cookie名称
server.servlet.session.cookie.name=SESSIONID# Session Cookie路径
server.servlet.session.cookie.path=/# Session Cookie域名
server.servlet.session.cookie.domain=# Session Cookie安全标志
server.servlet.session.cookie.secure=false# Session Cookie HttpOnly标志
server.servlet.session.cookie.http-only=true
在上面的配置中,我们可以设置Session的超时时间、Cookie名称、Cookie路径、Cookie域名、Cookie安全标志和Cookie HttpOnly标志等。
Session的使用场景
Session在Web应用程序中有很多使用场景,下面列举了一些常见的使用场景:
1. 用户登录状态管理
在Web应用程序中,通常需要对用户进行登录状态的管理。可以使用Session来存储用户的登录状态,如用户ID、用户名等。
2. 购物车管理
在电商网站中,通常需要对用户的购物车进行管理。可以使用Session来存储用户的购物车信息,如商品ID、商品名称、商品数量等。
3. 表单数据的临时存储
在Web应用程序中,通常需要对表单数据进行临时存储,以便用户在提交表单时能够恢复之前的数据。可以使用Session来存储表单数据,如表单字段的值等。
总结
Session是Web应用程序中的一个重要概念,它可以用于存储用户的登录状态、购物车信息等。在Spring Boot中,可以通过HttpServletRequest对象或@SessionAttributes注解来使用Session。同时,还可以通过application.properties文件来配置Session。
Java SSM框架中Session使用详解
Session的使用
在Java SSM框架中,使用Session机制需要进行以下几个步骤:
1. 获取Session对象
在Java中,可以通过HttpServletRequest对象的getSession()方法来获取Session对象。例如:
@RequestMapping("/test")
public String test(HttpServletRequest request) {HttpSession session = request.getSession();// ...
}
2. 向Session中存储数据
可以通过Session对象的setAttribute()方法来向Session中存储数据。例如:
session.setAttribute("username", "张三");
3. 从Session中获取数据
可以通过Session对象的getAttribute()方法来从Session中获取数据。例如:
String username = (String) session.getAttribute("username");
4. 从Session中删除数据
可以通过Session对象的removeAttribute()方法来从Session中删除数据。例如:
session.removeAttribute("username");
5. 设置Session的过期时间
可以通过Session对象的setMaxInactiveInterval()方法来设置Session的过期时间,单位为秒。例如:
session.setMaxInactiveInterval(60 * 60); // Session过期时间为1小时
6. Session的监听器
可以通过实现HttpSessionListener接口来监听Session的创建和销毁事件。例如:
@WebListener
public class MySessionListener implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent se) {HttpSession session = se.getSession();// Session创建时的处理逻辑}@Overridepublic void sessionDestroyed(HttpSessionEvent se) {HttpSession session = se.getSession();// Session销毁时的处理逻辑}
}
总结
Session机制是Web应用程序中非常重要的一种机制,可以用于维护用户的状态信息、实现购物车功能、防止重复提交等。在Java SSM框架中,使用Session机制需要进行获取Session对象、向Session中存储数据、从Session中获取数据、从Session中删除数据、设置Session的过期时间、Session的监听器等操作。
相关文章:

java中session各种使用场景实例,这篇文章就够了。
目录 java原生使用Session详解什么是SessionSession的使用Session的配置Session的安全性总结 SpringCloud中使用session详解1. 添加依赖2. 配置Redis3. 配置Session4. 使用Session5. Session超时时间6. Session共享7. Session序列化8. 总结 Spring Boot中Session使用详解Spring…...

【AWS入门】利用CloudWatch监控EC2的CPU负载情况
创建一个 EC2 实例 User data 配置如下 #!/bin/bash sudo -i amazon-linux-extras install epel -y yum install stress -y导航到 Cloudwatch->Metrics->All metrics-EC2->Per-Instance Metrics,选中创建的 EC2的 CPU 利用率,点击铃铛标识创建 alarm 设…...

如何使用AndroidStudio编写Java程序
文章目录 使用场景使用方法整体的思路具体的步骤经验总结使用场景 在开发Android项目中有时候需要写一些Java程序做示例或者验证,这里说的Java程序是指Java控制台程序,程序中带有独立的main()方法。如果把Java示例程序放到Android项目中那么需要运行整个项目才能编译Java示例…...

如何充分利用实时聊天系统?
随着商业和电子商务领域经历快速的数字革命,必须迅速适应的一个因素是我们与客户的互动方式。几年前,电子邮件和电话还是主要的客户联系方式。如今,客户期望更好的服务和更即时的沟通。实时聊天支持系统可以解决此问题,如SaleSmar…...

[C++基础]-类和对象(下)
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、深入学…...

NP完全性PART1:多项式时间与形式化语言体系
算法导论第三版,CH34笔记 NP完全性 Chapter Introduction 一般来说,我们认为可以在多项式时间内求解的问题是易处理的问题,在超多项式时间内解决的问题是不易处理的问题。 下面列出的几对问题,前者可以用多项式时间算法求解&…...

685页40万字某省市场监管智慧应用一体化项目(word可编辑)
1.2.3.1 数字XX公共能力建设现状 1.2.3.1.1 数字XX通用基础应用平台现状 通用基础应用平台提供具有共性特征的跨部门、跨层级业务应用,与本项目有关的平台包括某省网上办事大厅、某省政务服务 APP 统一平台(X政通 APP)、某省公共信用信息平…...

【cutlass】cuTe 01 layout
简介 Layout将坐标映射到地址空间,其对阵列单元在内存中如何排布进行抽象,并提供了获取多维阵列的接口。用户可以以正常的方式(不需要做复杂的地址计算)写多维阵列存取代码,对于存取的不同方式可以改变Layout来实现&a…...

迁移学习
迁移学习 什么是迁移学习 迁移学习【斯坦福21秋季:实用机器学习中文版】 迁移学习(Transfer Learning)是一种机器学习方法,它通过将一个领域中的知识和经验迁移到另一个相关领域中,来加速和改进新领域的学习和解决问…...

基于session实现共享登录
基于session实现登录 1.发送短信验证码 Override public Result sendCode(String phone, HttpSession session) {//1.校验手机号是否合规if (RegexUtils.isPhoneInvalid(phone)) {//2.不合规直接返回 错误信息return Result.fail("手机号错误");}//3.如果合规生成验…...

Hudi学习笔记1
使用注意 从 0.10.0 版本开始,primaryKey 为必须的,不再支持没有主键的表。 primaryKey、primaryKey 和 type 均大小写敏感。 对于 MOR 类型的表,preCombineField 为必须的。 当设置 primaryKey、primaryKey 或 type 等 hudi 配置时&#…...

嚯——ChatGPT是很强,但也会胡说八道。。。
现在的ChatGPT确实强,但是也会一本正经的胡说八道,例如它回答“nineteen”中有12个字母、或是旗鱼是哺乳动物…… 尽管ChatGPT可以生成流畅甚至优雅的散文,轻松通过困扰了AI领域超过70年的图灵测试基准,但它也可能看起来非常愚蠢…...

Springboot常用注解总结
目录 一、什么是Spring Boot二、Spring常用注解三、Spring Boot常用注解1、SpringBootApplication2、ImportAutoConfiguration3、SpringBootConfiguration4、ImportResource5、PropertySource6、PropertySources7、Role8、Scope9、Lazy11、Profile12、DependsOn13、PostConstru…...

让chatGPT给我写一个CSS,我太蠢了
前言 CSS这东西,让AI写的确有点难度,毕竟它写出来的东西,没办法直接预览,这是其次。重要的是CSS这东西怎么描述,不好描述啊,比如我让他给我制作一个这样的效果出来,没办法描述,所以…...

华为OD题目:分奖金
分奖金 知识点栈时间限制: 1s 空间限制: 256MB 限定语言: 不限 题目描述: 公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。 按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列…...

【算法题】2401. 最长优雅子数组
插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你一个由 正 整数组成的数组 num…...

【Vue】Vue快速入门
Vue快速入门 Vue.js的引入 要先有一个vue.js文件,可以在vue官网下载,将其复制到项目中并在html页面中进行引入: 在head标签内引入,src内是vue的路径 <!-- 引入vue.js--><script language"JavaScript" s…...

二本菜鸡,颓废两年的自我救赎
大家好,我是帅地。 随着校招的结束,帅地的星球里也有不少小伙伴前来报喜,今天这篇,是星球一个颓废两年同学的自我救赎之路,我觉得他的经历和很多人一样,前两年可能就颓废了,后面才后知后觉&…...

Spring boot 常用注解
SpringBootApplication:用于启动Spring Boot应用程序的主类上,组合了Configuration、EnableAutoConfiguration和ComponentScan三个注解。 RestController :修饰类,使用RestController注解的Controller中的方法默认返回值都会以JS…...

mysql从零开始(05)----锁
全局锁 使用 # 启用全局锁 flush tables with read lock # 释放全局锁 unlock tables开启全局锁后,整个数据库就处于只读状态了,这种状态下,对数据的增删改操作、对表结构的更改操作都会被阻塞。 另外,当会话断开,全…...

《Linux 内核设计与实现》03. 进程管理
文章目录 进程描述符及任务结构分配进程描述符进程描述符的存放进程状态设置当前进程状态进程上下文进程家族树 进程创建线程在 Linux 中的实现创建线程内核线程 进程终结删除进程描述符孤儿进程 进程描述符及任务结构 内核把进程存放在任务队列(task list…...

深入探究HDFS:高可靠、高可扩展、高吞吐量的分布式文件系统【上进小菜猪大数据系列】
上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。 引言 在当今数据时代,数据的存储和处理已经成为了各行各业的一个关键问题。尤其是在大数据领域,海量数据的存储和处理已经成为了一个不可避免的问题。为了应…...

GIMP制作艺术字技巧
GIMP下载官网 https://www.gimp.org/downloads/ 我使用的版本 2.10.32 字体下载 https://ziyouziti.com/index-index-all.html 下载解压之后会有otf、ttf等字体文件,需要拷贝到gimp当前用户目录 C:\Users\用户名\AppData\Roaming\GIMP\2.10\fonts GIMP绘制字…...

Redis 布隆过滤器总结
Redis 布隆过滤器总结 适用场景 大数据判断是否存在来实现去重:这就可以实现出上述的去重功能,如果你的服务器内存足够大的话,那么使用 HashMap 可能是一个不错的解决方案,理论上时间复杂度可以达到 O(1) 的级别,但是…...

云基础设施安全:7个保护敏感数据的最佳实践
导语:云端安全防护进行时! 您的组织可能会利用云计算的实际优势:灵活性、快速部署、成本效益、可扩展性和存储容量。但是,您是否投入了足够的精力来确保云基础设施的网络安全? 您应该这样做,因为数据泄露、…...

centos7安装nginx
1.配置环境 1).gcc yum install -y gcc2).安装第三方库 pcre-devel yum install -y pcre pcre-devel3).安装第三方库 zlib yum install -y zlib zlib-devel2.下载安装包并解压 nginx官网下载:http://nginx.org/en/download.html 或者 使用wget命令进行下载 wg…...

PyQt5 基础篇(一)-- 安装与环境配置
1 PyQt5 图形界面开发工具 Qt 库是跨平台的 C 库的集合,是最强大的 GUI 库之一,可以实现高级 API 来访问桌面和移动系统的各种服务。PyQt5 是一套 Python 绑定 Digia QT5 应用的框架。PyQt5 实现了一个 Python模块集,有 620 个类,…...

Java—JDK8新特性—函数式接口【内含思维导图】
目录 3.函数式接口 思维导图 3.1 什么是函数式接口 3.2 functionalinterface注解 源码分析 3.3 Lambda表达式和函数式接口关系 3.4 使用函数式接口 3.5 内置函数式接口 四大核的函数式接口区别 3.5.1 Supplier 函数式接口源码分析 3.5.2 Supplier 函数式接口使用 3.…...

【MySQL】外键约束和外键策略
一、什么是外键约束? 外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。 外键是指表…...

3. SQL底层执行原理详解
一条SQL在MySQL中是如何执行的 1. MySQL的内部组件结构1.1 Server层1.2 Store层 2. 连接器3. 分析器4. 优化器5. 执行器6. bin-log归档 本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。 1. MySQL的内部组件结…...