将错误提示信息存入到request域中共享,而不是存入cookie中
在做一个验证验证码,及用户名是否正确的小项目时,要求将错误信息展示在登录界面,当时以为页面会跳转就把错误信息存入到了cookie当中,并交由登录界面jsp进行输出显示。后来知道页面不会跳转,那么就相当于在一次请求范围内,用request域进行数据共享即可
if (rightcode==null||!(checkcode.equalsIgnoreCase(rightcode))) {
//设置request域中共享数据
request.setAttribute("message","验证码错误");
//转发至登录页面
request.getRequestDispatcher("/index.jsp").forward(request,response);
} else {
//验证码获取用户输入的用户名及密码
String username = request.getParameter("username");
String password = request.getParameter("password");
//调用登录方法并返回查询对象
user getuser = Login.getuser(username, password);
if (getuser == null) {
//设置request域中共享数据
request.setAttribute("message","用户名或密码错误");
//转发至登录页面
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
而下方用户名,密码,验证码 全部正确后要求的时跳转至success.jsp,不在一次请求的范围内,且涉及到存储了用户对象,在success.jsp页面显示,所以将对象存入session中而不是cookie中,并利用重定向对页面进行了跳转
//用户存在,往session中存入用户对象
session.setAttribute("user",getuser);
//跳转至success.jsp
response.sendRedirect(request.getContextPath()+"/Success.jsp");
在登陆界面中对错误 信息的输出做了处理,防止在没有错误信息,自动在页面上输出null
<div><%=
//获取域中的错误信息并输出,无信息时不显示任何数据
request.getAttribute("message")==null?"":request.getAttribute("message")
%>
</div>
防止登录成功后,后退至登录界面,只需要输入密码而不需要输入验证码,对验证码造成了重复利用
HttpSession session = request.getSession();
String rightcode = (String)session.getAttribute("checkcode");
//获取验证码完毕后将session中的验证码删除防止验证码重复利用
session.removeAttribute("checkcode");
//若验证码错误或验证码为空 跳转至首页并提醒验证码错误 忽略验证码大小写
if (rightcode==null||!(checkcode.equalsIgnoreCase(rightcode))) {
//设置request域中共享数据
request.setAttribute("message","验证码错误");
//转发至登录页面
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
在session中获取正确的验证码后,直接将session中的验证码数据删除,那么后退登录界面重新登录时,进行判断 验证码为null 提示验证码错误需要重新输入解决