无法从servlet中删除cookie

时间:2015-12-25 12:04:20

标签: java servlets cookies

我需要帮助从servlet中删除Cookie。

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

在doPost()函数中的

我检查输入是否有效(没有空消息/用户名,并且用户名只包含数字或字母)。 如果输入有问题,我会为错误消息创建新的Cookie 并将其添加到响应中(我没有设置cookie的路径或域)。

access-control-allow-origin: *

在doGet()函数中,我检查cookie中是否有任何错误,并将它们保存在我将在HTML输出中显示的字符串中。 保存错误后,我尝试删除Cookies(通过maxAge(0)),但令人惊讶的是它不起作用......

    @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");
    }
}

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
    }
    

    乐意帮助