日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

瀏覽器獲取不到服務器端添加的Cookie

作者:cpt_ljy 更新時間: 2022-03-14 編程語言

記錄一下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;
                }
            }
        }

原文鏈接:https://blog.csdn.net/cpt_ljy/article/details/103764352

欄目分類
最近更新