2015-12-25 50 views
0

我需要从servlet中删除Cookie的帮助。无法从servlet中删除cookie

我需要实现简单的聊天程序:

在我检查,如果输入的是有效的(没有空消息/用户名和用户名只能由数字或字母)的的doPost()函数

。 如果输入有问题,我为错误消息 创建新的Cookie并将其添加到响应中(我没有设置Cookie的路径或域)。

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    //--- Get Data From User --- 
    String userName= request.getParameter("userName"); 
    String msg= request.getParameter("comment"); 

    //--- Check if 'userName or 'msg' are empty --- 
    userName = userName.trim(); 
    msg = msg.trim(); 

    //--- Response --- 
    if (userName.isEmpty() || msg.isEmpty() || !userName.matches(pattern)) 
    { 
     if (userName.isEmpty() || msg.isEmpty()) 
     { 
      //store new Cookie for the error message 
      Cookie c1 = new Cookie("erorrEmpty", "\"<p>ERROR: \\\"username\\\" and \\\"message\\\" should not be empty.</p>\""); 
      // c1.setMaxAge(60*60); 
      //c1.setPath("."); 
      response.addCookie(c1); 
     } 
     if (!userName.matches("^[a-zA-Z0-9]+$")) 
     { 
      //store new Cookie for the error message 
      Cookie c2 = new Cookie("errorNotAlphanumeric", "\"<p>ERROR: \\\"username\\\" should consist of letters and numbers only.</p>\""); 
          // c2.setMaxAge(60*60); 
          // c2.setPath("."); 
      response.addCookie(c2); 
     } 

     //--- display form with errors --- 
     response.sendRedirect("/ex3/MsgServlet?action=1"); 

    } 
    else 
    { 
     // Insert New Message To The Vector.... 

     //--- display all messages --- 
     response.sendRedirect("/ex3/MsgServlet?action=2"); 
    } 
} 

在我检查是否有饼干的任何错误,并将其保存在一个字符串,我会在HTML输出显示的doGet()函数。 后,我救我尝试删除cookies(由MAXAGE(0)),但意外的是不工作的错误...

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

     PrintWriter out = null; 
    try{  

     //--- Determine Content Type --- 
     response.setContentType("text/html"); 

     //--- Get Writer --- 
     out = response.getWriter(); 


     if (request.getParameter("action").equals("1")) //display form with errors if exists 
     { 

      String error = ""; 

      //--- names of cookies to look for --- 
      String emptyFiledsCookieName = "erorrEmpty"; 
      String notAlphanumericCookieName = "errorNotAlphanumeric"; 

      Cookie[] cookies = request.getCookies(); 
      if (cookies != null) 
      { 
       for(Cookie cookie: cookies) 
       { 
        if (emptyFiledsCookieName.equals(cookie.getName()) || notAlphanumericCookieName.equals(cookie.getName())) 
        { 
         error=error+ cookie.getValue() +"\n"; 
        } 
       } 

       for(Cookie cookie: cookies) 
       { 
        if (emptyFiledsCookieName.equals(cookie.getName()) || notAlphanumericCookieName.equals(cookie.getName())) 
        { 
         cookie.setMaxAge(0); 
        } 
       } 
      } 


       out.println("<html><head><title>"); 
       out.println("compose message</title>"); 
       out.println("<meta charset=\"UTF-8\">"); 
       out.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">"); 
       out.println("</head><body>"); 

       //--- Print Errors --- 
       out.println(error); 

       out.println("<form action=\"MsgServlet\" method=\"POST\" id=\"usrform\">"); 
       out.println("<p>username:</p>"); 
       out.println("<input type=text name=userName><br>"); 
       out.println("<input type=submit value=\"post\"></form>"); 
       out.println("<br><p>message:</p><textarea rows=\"4\" cols=\"50\" name=\"comment\" form=\"usrform\"></textarea>"); 
       out.println("</body></html>"); 

      } 
     else if (request.getParameter("action").equals("2")) 
     { 
      //display messages 

     } 
} 

我看到其他的问题在这个问题上,但他们提到setDomain()和setPath()函数。这与我无关,因为我没有在创建Cookie时使用它们。

回答

0

如果你能得到它,你可以改变它!

你必须将其添加到答案。

HttpServletResponse resp 

Cookie[] cookies = request.getCookies();  

Cookie the_cookie // get the good one ! 

the_cookie.setMaxAge(0); 

resp.addCookie(the_cookie); 

或看到:How do you remove a Cookie in a Java Servlet

+0

谢谢!!!!!你救了我。这行“resp.addCookie(the_cookie);”失踪。 – daniel

0

getMaxAge(INT):

  • 获取此cookie秒的最长期限。
  • 默认情况下,返回-1,表示cookie将一直存在,直到浏览器关闭。
  • 如果为负数,则意味着cookie会一直存在,直到浏览器关闭。

    public static Cookie eraseCookie(String CookieName, String Path) { 
    Cookie cookie = new Cookie(CookieName, ""); 
    cookie.setMaxAge(0);// Set as a o 
    cookie.setPath(Path); 
    return cookie; 
    } 
    

    乐意帮助