session案例

session案例-防止表单重复提交

表单页面由servlet程序生成,servlet为每次产生的表单页面分配一个唯一的随机标识号,并在FORM表单的一个隐藏字段中设置这个标识号,同时在当前用户的Session域中保存这个标识号。
当用户提交FORM表单时,负责处理表单提交的serlvet得到表单提交的标识号,并与session中存储的标识号比较,如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。
在下列情况下,服务器程序将拒绝用户提交的表单请求:
存储Session域中的表单标识号与表单提交的标识号不同
当前用户的Session中不存在表单标识号
用户提交的表单数据中没有标识号字段
session案例一次性校验码

一次性验证码的主要目的就是为了限制人们利用工具软件来暴力猜测密码。
服务器程序接收到表单数据后,首先判断用户是否填写了正确的验证码,只有该验证码与服务器端保存的验证码匹配时,服务器程序才开始正常的表单处理流程。
密码猜测工具要逐一尝试每个密码的前题条件是先输入正确的验证码,而验证码是一次性有效的,这样基本上就阻断了密码猜测工具的自动地处理过程。

案例:

public class AdminLoginServlet extends HttpServlet {

private AdminService aService = new AdminServiceImpl();

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
       //post 怎么解决乱码
  request.setCharacterEncoding("UTF-8");
  String checkcode = request.getParameter("checkcode");
  if(checkcode == ""){
   request.setAttribute("msg", "验证码为空");
   RequestDispatcher  rd= request.getRequestDispatcher("/login.jsp");
      rd.forward(request, response);
  }else{
  String ckcode =  (String) request.getSession().getAttribute("ckcode");
  if(checkcode.equals(ckcode)){
  // request.getSession().getAttribute("checkcode");
   String name = request.getParameter("uname");
   String pass = request.getParameter("upass");
  
   Admin entity = aService.checkLogin(name, pass);


  if(entity==null){
   //重定向 
   request.setAttribute("msg", "用户名或者密码错误");
   RequestDispatcher  rd= request.getRequestDispatcher("/login.jsp");
      rd.forward(request, response);
   //请求转发
 
  }else{
   System.out.println(entity.toString());
   //利用session存入用户对象
   request.getSession().setAttribute("admin", entity);
   //转发到这个index.jsp页面中  疑问 index.jsp能获取到admin对象的值
   //response.sendRedirect("./index.jsp");
   //请求转发
   RequestDispatcher  rd= request.getRequestDispatcher("/index.jsp");
      rd.forward(request, response);
   }
   }else{
    request.setAttribute("msg", "验证码不正确");
    RequestDispatcher  rd= request.getRequestDispatcher("/login.jsp");
       rd.forward(request, response);
   }
  }
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
        doGet(request, response);
}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值