千家信息网

Session的活化和钝化,表单重复提交,验证码使用流程

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,钝化指将HttpSession对象序列化到硬盘中,一般钝化发生在服务器停止,服务器停止时会自动将HttpSession对象序列化到硬盘,这个事我们称为钝化。活化将硬盘中HttpSession对象加载进
千家信息网最后更新 2024年11月22日Session的活化和钝化,表单重复提交,验证码使用流程
  • 钝化

指将HttpSession对象序列化到硬盘中,一般钝化发生在服务器停止,服务器停止时会自动将HttpSession对象序列化到硬盘,这个事我们称为钝化。

  • 活化

将硬盘中HttpSession对象加载进内存中,一般在服务器启动时,会自动将硬盘中HttpSession对象重新加载进内存,这一过程我们成为活化。

  • 钝化指将内存中的对象写到硬盘中,

  • 一个类要想可以序列化到硬盘中必须要实现java.io.Serializable接口

  • 这个类中的所有属性也需要实现java.io.Serializable接口

  • 如果服务器的访问量较大,那么服务器会有大量的HttpSession对象存在,

但是这些对象并不是都处于一个活跃的状态,但是这些不活跃也会存在于内存中

这样会大量占用内存,这时我们就希望将这些闲置的对象写入硬盘中,在用户需要使用session在加载进内存。

在context.xml文件中可以加入如下内容

maxIdleSwap:指session的最大闲置时间,超过该时间以后,session将会自动钝化。

directory:钝化到硬盘中的目录

session会钝化到tomcat服务器的work目录中

表单的重复提交

  • 表单重复提交指的是同一个表单相同的内容多次提交请求

  • 表单重复提交的危害:

1.表单重复提交,都是重复的数据,会增加数据库中垃圾数据。

2.无形中增加了服务器压力。

  • 表单重复提交的几种情况:

1.表单提交成功以后,反复刷新成功页面。

  • 产生问题的根本原因:

我们在Servlet使用的转发的形式跳转到成功页面的,所以整个过程中浏览器只发送了一次请求,当我们在成功页面刷新时,实际是将上次的请求又发送了一遍,所以造成了重复提交。

  • 解决:

不使用转发,而是使用重定向

重定向发了两次请求,我们再次刷新,刷新的第二个请求,而不是第一个。

2.网速较慢时,用户多次点击提交按钮。

  • 产生问题的根本原因:

就是表单的提交按钮可以点击多次

  • 解决:

使表单的提交按钮只能点一次,点完一次以后按钮将变为不可用的状态。

_window.onload = function(){

//点击完提交按钮以后,让按钮变为一个不可用的状态

//获取按钮对象

var btn = document.getElementById("btn");

//为按钮绑定一个单击响应函数

btn.onclick = function(){

//设置按钮为不可用状态

this.disabled = true;

//如果将按钮设置为不用状态,那么表单也将不会提交

//我们需要手动提交表单

this[xss_clean].submit();

};
};

3.成功提交请求后,点击回退按钮,但是不刷新页面,再次提交。

  • 产生问题的根本原因:

服务器端的Servlet不能区分两次请求是不是重复提交的内容

  • 解决:

在Servlet中,我们需要在处理请求之前,先来检查表单是否是重复提交。

使用token解决这个问题

token就是令牌意思

所谓的token就是服务器在处理用户请求之前,先检查token是否正确,如果token正确那服务器正常处理请求,如果token不正确服务器不处理请求.

我们的令牌是一个一次性的令牌,只能使用一次.

流程:

1.创建一个令牌,要求唯一,不能重复(UUID),并在服务器中保存token。

2.放入到浏览器的表单中。

3.浏览器提交表单时,会同时将token一起提交。

4.服务器在处理请求之前要检查令牌是否有效。

5.销毁token。

验证码使用流程

上述工作,大部分工作我们都可以通过一款jar包来完成。
kaptcha-2.3.2
该Jar可以:
1.可以生成一个随机的字符串
2.可以将字符串保存到session
3.可以将字符串转换为一个图片
这个kaptcha-2.3.2里边实际上就是一个Servlet,我们通过访问他给我们提供的Servlet,就可以直接完成上述工作

导入jar包之后,通过在web.xml文件中注册servelt即可。

< servlet>    < servlet-name >kaptcha     com.google.code.kaptcha.servlet.KaptchaServlet           //在session中存储该验证码的属性的名字               kaptcha.session.key        code            kaptcha    /code.jpg  


表单 服务器 服务 按钮 对象 硬盘 内存 成功 令牌 状态 处理 就是 问题 页面 内容 原因 字符 字符串 序列 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津服务器硬盘质量怎么样 笔记本默认网关和服务器无法保存 迪文触摸屏组态软件开发工具 IQ 数据库数据类型 前瞻数据库蒙牛 ipa信任证书软件开发 数据库查询的语句是什么 临海进口软件开发价格行情 金仓数据库初始化 关系型数据库是最广泛应用的 数据库 数据词典 图片上传到远程服务器 数据库技术与应用第四版课后答案 彩票系统开发服务器的价格和价位 docker简单装sql数据库 济南软件开发前端培训学费 国税网络安全周总结 芜湖物业管理软件开发公司哪家好 七台河市天气预报软件开发 数据库的深度 济南网络技术公司有几家 汽车车载网络技术的作用 计算机与网络技术专业专升本考 使用ssms登陆本地数据库 计算机网络技术不挂科 战神引擎数据库启动失败 分散化网络安全服务 彩票系统开发服务器的价格和价位 cmd 删除服务器管理员 linux 数据库文件
0