记录一下java学习过程中的bug
cookie.setPath、setMaxAge都设置了,但是在登录页面读取不到添加的cookie信息
后端LoginServlet界面
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收数据
String username = request.getParameter("username");
String password = request.getParameter("password");
//从ServletContext域中获得保存用户信息集合;
List<User> list= (List<User>) this.getServletContext().getAttribute("list");
for(User user:list) {
//判断用户名是否正确
if(username.equals(user.getUsername())) {
//用户名是正确的
if(password.equals(user.getPassword())) {
//密码也正确
//登录成功
//将用户信息保存到session中:
request.getSession().setAttribute("user", user);
response.sendRedirect(request.getContextPath()+"/success.jsp");
//完成记住用户名的功能
String remeber= request.getParameter("remeber");
if("true".equals(remeber)) {
Cookie cookie = new Cookie("username",user.getUsername());
//设置有效的路径和有效时间
cookie.setPath("/reg_login");
cookie.setMaxAge(60*60*24);//24hour
//将cookie回写到浏览器
response.addCookie(cookie);
}
return;
}
}
}
//登陆失败;
request.setAttribute("msg", "用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
前端Login.jsp界面
<%
String username = "";
//获得从客户端携带过来的所有Cookie
Cookie[] cookies = request.getCookies();
//从Cookie的数组中查找指定名称的Cookie
Cookie cookie = CookieUtils.findCookie(cookies,"username");
if(cookie !=null){
username = cookie.getValue();
}
%>
然后cookie信息不起作用,在login.jsp页面添加打印cookie信息代码,发现LoginServet中cookie信息并没有回传到浏览器,也就是说response.addCookie(cookie);没有起作用。
<%
String userName = "";
//获得从客户端携带过来的所有cookie
Cookie[]cookies = request.getCookies();
//从Cookie的数组中查找指定名称的Cookie
for(Cookie cookie:cookies){
System.out.println("cookie.Name:"+cookie.getName());
System.out.println("cookie.value:"+cookie.getValue());
if(cookie.getName().equals("userName")){
userName = cookie.getValue();
}
}
%>
搜了好长时间没找到想要的解决方案,最终在https://www.cnblogs.com/woestave/p/6260526.html中找到了答案。
错误:
因为在LoginServlet页面中,登录成功后response.sendRedirect(request.getContextPath()+"/success.jsp"); 已经把请求转发给另一个页面了,所以虽然也创建了cookie,并能输出cookie.getName(),但是response已经不具备向浏览器响应请求的能力了,response.addCookie(cookie)也就不起作用
解决方案:
for(User user:list){
if(user.getUsername().equals(userName)){
if(user.getPassword().equals(password)){
//完成记住用户名的功能
String remember = request.getParameter("remember");
if("true".equals(remember)){
Cookie cookie = new Cookie("userName",userName);
cookie.setPath(request.getContextPath());
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);
}
//登录成功,重定向到成功页面
request.getSession().setAttribute("user",user);
response.sendRedirect(request.getContextPath()+"/success.jsp");
return;
}
}
}