NOTE:浏览器首次访问服务器,双方都没有该cookie,当服务器获取到浏览器的相关信息后生成cookie,服务器自己保留对于该浏览器的cookie相关信息,并将该信息发送给浏览器,浏览器保存该信息到硬盘中,此时当浏览器再次访问该服务器时,服务器会和浏览器的cookie做对比,若一致则返回相应内容。

首先要知道:Cookie由服务器创建,由浏览器保存。

cookie的生存周期

  • >0 可以设置生存时长,数据存放在客户端硬盘里。
    在有效时间内访问依旧可以获得当时的cookie。
    例如:设置为5分钟有效期,其中5分钟就是有效时间。

  • =0 立刻杀死(不常用,少之又少)
    即打开浏览器,浏览器获取了cookie,但是服务器会立刻“杀死”(删除)该cookie
    后果:访问不成功:错误码500

  • -1 关闭浏览器即可消失,该cookie存在于内存
  • 查看cookie

    创建cookie并添加到请求头

    //存cookie
    package Cookies;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/CookieServlet")
    public class CookieServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("Text/Html;charset=UTF-8");//编码格式,懂的都懂。
            //创建cookie对象
            Cookie cookie1=new Cookie("user","Admin");//new一个cookie,以键值对方式存放,注意该分隔为“,”而不是":"
    
            //设置cookie的生命周期:
            cookie1.setMaxAge(60);//此处以秒为单位,格式可为(60*5),即5分钟。
            response.addCookie(cookie1);//将cookie1存入浏览器的请求头。
        }
    }
    

    遍历所有cookie后输出查看

    package Cookies;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/GetCookieServlet")
    public class GetCookieServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("Text/Html;charset=UTF-8");
            PrintWriter out=response.getWriter();
            //获取cookie
            Cookie cookies[]=request.getCookies();
            //遍历数组:
            for (int i=0;i<cookies.length;i++){
                String name=cookies[i].getName();//获取cookie名称
                String value=cookies[i].getValue();//获取cookie值
                out.print(name+":"+value+"<br>"+"<hr />");
            }
        }
    }
    
    NOTE:首先,上面的CookieServlet创建了一个cookie,并将创建的cookie添加到浏览器的请求头了(此时,不管服务器有没有,但是我请求头有,后面的遍历也会将该cookie输出。)然后GetCookieServlet去获取并输出cookie