浏览器获取不到服务器端添加的Cookie

记录一下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;
                }
            }
        }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值