J'ai besoin d'aide pour supprimer les cookies du servlet.

J'ai besoin d'implémenter un programme de chat simple:

Dans la fonction doPost () je vérifie si l'entrée est valide (pas de messages vides / nom d'utilisateur et que le nom d'utilisateur ne se compose que de chiffres ou de lettres). S'il y a un problème avec l'entrée, je crée un nouveau cookie pour le message d'erreur et ajoutez-le à la réponse ( Je ne fixe pas le chemin ou le domaine du 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");
    }
}

Dans la fonction doGet (), je vérifie s'il y a des erreurs dans les cookies et je les sauvegarde dans une chaîne que j'afficherai dans la sortie HTML. Après avoir enregistré les erreurs, j'essaie de supprimer les cookies (par maxAge (0)) mais étonnamment cela ne fonctionne pas ...

    @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

         }
}

J'ai vu d'autres questions dans ce numéro, mais elles ont mentionné les fonctions setDomain () et setPath (). Ce n'est pas pertinent pour moi car je ne les ai pas utilisés dans la création des cookies.

0
daniel 25 déc. 2015 à 15:04

2 réponses

Meilleure réponse

Si vous pouvez l'obtenir, vous pouvez le changer!

Vous devez l'ajouter à la réponse.

HttpServletResponse resp

Cookie[] cookies = request.getCookies();    

Cookie the_cookie // get the good one !

the_cookie.setMaxAge(0);

resp.addCookie(the_cookie);

Ou voyez ça: Comment supprimer un cookie dans un Servlet Java

0
Community 23 mai 2017 à 12:23

GetMaxAge (int):

  • Obtient l'âge maximum en secondes de ce cookie.
  • Par défaut, -1 est renvoyé, ce qui indique que le cookie persistera jusqu'à l'arrêt du navigateur.
  • s'il est négatif, cela signifie que le cookie persiste jusqu'à l'arrêt du navigateur.

    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;
    }
    

    Heureux d'aider

0
Anand Dwivedi 28 déc. 2015 à 04:15