当前位置: 首页 > article >正文

web实操9——session

概念

数据保存在服务器HttpSession对象里。
在这里插入图片描述
session也是域对象,有setAttribute和getAttribute方法

快速入门

在这里插入图片描述

代码

获取session和塞入数据:
在这里插入图片描述
获取session获取数据:
在这里插入图片描述
请求存储:
在这里插入图片描述
请求获取:
在这里插入图片描述
数据正常打印:
在这里插入图片描述

结论

由于浏览器和服务器都没用关闭,所以上面相当于一次会话的两次请求。
这时候把浏览器关闭,再直接访问demo2:
输出null,说明范围确实是在一次会话的:
一次会话中才能用session来共享数据。
在这里插入图片描述

原理分析

在这里插入图片描述
竟然共享数据,那么两次请求获取的肯定是同一个session。
那服务器是怎么确保这两个session是同一个的?
在这里插入图片描述
!!!session是依赖于cookie的,cookie是通过请求头和响应头来实现的。
1)第一次获取session,没有cookie会在内存中创建一个新的session对象,并且这个session对象有一个唯一的id值
2)给浏览器做响应的时候会发送一个响应头set-cookie:值是JSSONID=上面的session的Id。
3)浏览器收到cookie头会把cookie信息存储到浏览器内部。
4)下一次再访问当前项目里的其他资源的时候会携带这个cookie头,通过请求头cookie,值:JSSONID=session的Id值。
5)服务器自动去获取这个cookie信息,然后根据cookie信息去查找内存中有没有一个id为带过来的id的session对象。
6)找到了,getSession方法就找到了并返回。

通过抓包看

第一次:
请求头没有请求信息,响应头有响应:
在这里插入图片描述
第二次:
请求头有:
在这里插入图片描述
第一次第二次两个id值是一样的。

细节一

在这里插入图片描述

期望客户端关闭后session也能相同代码

设置一个cookie:
并设置最大存活时间,比如设置成一个小时(60秒*60=1h),那么在这一个小时之内,浏览器不管是否关闭,获取的session都是同一个。
在这里插入图片描述
我们先访问一次:
在这里插入图片描述

第一次访问session对象地址值为:
在这里插入图片描述
浏览器关闭后再次访问:
地址值一样:
在这里插入图片描述

细节二

在这里插入图片描述
浏览器不关闭,浏览器访问一次后,服务器关闭,浏览器再访问一次,两次session地址值一样么:

服务器关了,内存被释放了,session对象在内存里,所以肯定会一同被销毁掉,下次我们打开服务器再创建,两次session的地址值很难一样

两次不一样有什么问题:
虽然对象不是同一个,但是要确保数据不丢失。
钝化:序列化的过程
活化:反序列化的过程
在这里插入图片描述

说明:

tomcat已经帮我们做好钝化和活化的事了,但是idea完成不了钝化和活化的操作,我们需要借用本地的tomcat。

tomcat演示

先把工作空间里的复制到tomcat下面:
在这里插入图片描述
把这个复制一份放桌面然后把里面全部的内容打一个包:
在这里插入图片描述
在这里插入图片描述
改个名字, 直接把.zip扩展名改成.war:
在这里插入图片描述
在这里插入图片描述
然后直接把这个war包复制一份放到tomcat的webapps下:
在这里插入图片描述
然后启动本地的tomcat:
先访问demo1:
在这里插入图片描述
控制台没有任何输出:
在这里插入图片描述
再访问demo2:
在这里插入图片描述
在这里插入图片描述
然后服务器正常关闭掉,看tomcat是否会把session对象序列化到硬盘上:
到work目录下:
work目录下存储的是程序运行中动态生成的数据,包括jsp转换的java文件,session被序列化后的文件。

现在什么都没有:
在这里插入图片描述
然后服务器正常关闭:
在这里插入图片描述
这边自动生成一个:
这里面放的就是session对象。
在这里插入图片描述
然后再服务器启动:
这里自动消失了,他把对象又自动还原到内存中了。
在这里插入图片描述
虽然这时候地址值不一样,但是里面内容sessionid值都是一样的。
访问demo2:
依然可以拿到里面的数据:
在这里插入图片描述

说明

idea只能钝化不能活化,没关系,因为将来部署项目不会在idea本地部署,都是在tomcat服务器里。

细节三——session的失效时间

在这里插入图片描述

解释说明

2)httpSession中session自杀的方法:
一调用session就自己杀掉了自己。
在这里插入图片描述
3)比如打开一个网站,登陆了,登录30分钟之内没做任何操作,这时候session会失效,会提示你重新登录。session如果30分钟内不活动就会被服务器自动删除掉。
但是可以在tomcat里选择性配置的:
web.xml是所有项目的父配置文件:
在这里插入图片描述
打开,搜一下session的配置:
可以修改想要的时间。
在这里插入图片描述

session的特点

在这里插入图片描述
1)存的值是object,所以可以存任何类型。而且session没有大小的限制,想存多大存多大,只要你内存放得下。
在这里插入图片描述
2)重定向是一次会话中两次请求,两次请求之间我们要共享数据,可以使用session也可以使用applicationContext,但是使用context范围太大了,所以session是我们经常采用的共享一次会话的数据。
3)session一般存的数据比较大,session翻译过来是主菜的意思,cookie是小饼干,所以从他们体量来说session也比较大一点。

案例——验证码


http://www.kler.cn/a/468675.html

相关文章:

  • AI Agent 开发共学招募 | 来 Sui 上探索自治智能的边界
  • 【论文复现】改进麻雀搜索算法优化冷水机组的最优负载调配问题
  • 清除数字栈
  • 外网访问本地部署的 VMware ESXi 服务
  • vscode如何离线安装插件
  • flutter在windows平台中运行报错
  • 基于傅立叶神经网络(FNN)与物理信息神经网络(PINN)求解泊松方程(附Pytorch源代码)
  • 高等数学学习笔记 ☞ 连续与间断
  • weblogic安装 12.2.1.4.0 单机
  • 工程师了解的Lua语言
  • Python 使用会话 ID 管理多轮对话
  • web应用安全评估报告:会话Cookie未设置Secure属性(如果网站未部署 HTTPS,则无法使用 Secure 属性。)
  • 计算机网络--路由表的更新
  • Verilog语法之模块与端口
  • 基于LightGBM的集成学习算法
  • sniff2sipp: 把 pcap 处理成 sipp.xml
  • 深入探讨服务器虚拟化:架构、技术与应用
  • 在 macOS 中,设置自动将文件夹排在最前
  • 小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式
  • React 如何进行路由变化监听
  • qt-C++笔记之动画框架(Qt Animation Framework)入门
  • 【Unity报错】error Cs0103: The name ‘keyCode‘ does not exist in the current context
  • 《机器学习》——决策树
  • 【Leetcode 每日一题】2241. 设计一个 ATM 机器
  • 12.3【hardware][day3]
  • springboot优先级和ThreadLocal