session案例
2011-11-07 20:04
127 查看
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);
}
}
表单页面由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);
}
}
相关文章推荐
- Servlet 4 JSP EL Cookie Session 商品浏览记录案例 购物车案例
- [原创]java WEB学习笔记33:Session 案例 之 购物车
- Session会话概述及案例
- 心得2--Session简介及案例分析
- Nginx+Weblogic集群及session共享复制(生产案例) 推荐
- Session用法案例 -->实现简单购物车功能(实际项目可能不会这么使用)
- Redis简单案例(四) Session的管理
- Struts默认存储request,转化session存储的三中方式案例
- Session案例 用户登录
- Session案例一次性验证码登录
- 一个小的登录查看的session案例
- 13.Cookie的应用与Session会话处理(小案例:登录验证)
- java同一浏览器session问题和QQ账号异地登陆案例
- koa实现session保存mongodb案例
- WEB——Session案例
- tomcat实现session保持案例
- Android之利用session实现抵御模拟请求失败案例
- session的典型案例一:使用session实现购物车
- Python自动化之session反解案例
- session案例:防止表单重复提交、一次性校验码