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

发布时间:2020-06-07 21:19:25 作者:rob_rookie
来源:网络 阅读:780

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

将硬盘中HttpSession对象加载进内存中,一般在服务器启动时,会自动将硬盘中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.parentNode.submit();

        }; 
    };

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

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

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

使用token解决这个问题

token就是令牌意思

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

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

流程:

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

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

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

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

5.销毁token。

 

验证码使用流程

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

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

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

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

  <servlet-mapping >
    <servlet-name >kaptcha</ servlet-name>
    <url-pattern >/code.jpg</ url-pattern>
  </servlet-mapping >


推荐阅读:
  1. php防止表单重复提交
  2. 表单重复提交如何解决?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

验证码 服务器 访问量

上一篇:Firewalld防火墙基础

下一篇:02-准备实验环境(批量克隆)-013-安装Windows 2019系统补丁

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》