JAVAEE_Servlet_21_Cookie

Cookie

  * Cookie 是什么?
     
         - Cookie翻译过来是曲奇饼干的意思
       
         - Cookie可以保存回话状态,但是这个会话状态是保存在客户端上的,只要清除Cookie,或者 Cookie失效,这个会话状态就没有了

         - Cookie是保存在浏览器客户端上的,可以存在浏览器客户端的以下位置上:
                 
                  1. Cookie可以保存在浏览器的缓存中,浏览器关闭Cookie消失

                  2. Cookie也可以保存在客户端的硬盘文件中,浏览器关闭Cookie还在,除非清除cookie或者Cookie失效了

  
  * Cookie只有在javaWeb中有吗?

     
        - Cookie不只是存在于JavaWeb中,只要是Web开发,只要是基于HTTP协议,就会有Cookie的存在

        - Cookie这种机制,是HTTP协议规定的,专门用来保存会话状态.


  * Cookie所实现的功能常见的有什么?
            
	     - 在客户端保存购物车商品状态

	     - 十天内免登录
	       
	       ...

  * 在java 中Cookie被当做类来处理,使用new运算符可以创建Cookie对象。

  * Cookie由两部分组成,分别是cookie的 name 和 value,两者都是字符串类型数据。

  * 怎么创建Cookie?
                 
      - Cookie cookie01= new Cookie ("String Cookiename", "String  CookieValue");
            
	//创建Cookie对象
	Cookie cookie01= new Cookie("username", "morty");
	Cookie cookie02= new Cookie("password", "123456");


  * 怎么将发送cookie发送给浏览器?
               
	   - 默认情况下,浏览器将Cookie对象发送给浏览器后,浏览器将Cookie保存在了浏览器的缓存中,只要浏览器不关闭Cookie一直存在,并且有效。浏览器关闭后cookie失效。

	   - 服务器可以一次向浏览器发送多个cookie。

	   - 服务器发送Cookie到浏览器的方法: response.addCookie(cookieName);

             // 将cookie对象发送给浏览器
                response.addCookie(cookie01);
		response.addCookie(cookie02);




 * 在浏览器缓存中保存着的Cookie什么时候会发给服务器呢?
 
      - 浏览器会不会将缓存中的Cookie发送给服务器,和请求路径有关系,请求的路径和Cookie是关联在一起的,不同的路径会发送不同的Cookie给服务器。 

      -  例如:在浏览器地址栏输入京东的请求路径,浏览器就会将与京东请求路径相关联的Cookie发送给服务器。



 * 默认情况下Cookie是和什么路径绑定在一起的呢?
 
     - 我们是在 /myWeb/CreateAndSendCookieToBrowser下发送的Cookie给浏览器

     - 那么这个Cookie就会和myWeb/这个路径保存在一起,所以以后只要输入的请求路径带有myWeb/,浏览器就会将缓存中的Cookie提交给服务器



 * 其实和Cookie所绑定在一起的路径是可以设置的,可以通过java程序进行设置,从而保证Cookie能够和某个特定的路径绑定在一起
     
     - 如何设置Cookie的绑定路径呢?
    
       //设置Cookie的关联路径
         cookie1.setPath(request.getContextPath()+"/king");
         cookie2.setPath(request.getContextPath()+"/king");
       
        > 此时Cookie将和 “ /myWeb/king ” 整个完整的路径绑定在一起,只有发送包含“/myWeb/king”的请求路径,浏览器才会提交Cookie给服务器。



 * 如何设置将Cookie保存在浏览器客户端的硬盘上呢?
          
	  - 如果没有设置Cookie的有效时间,那么Cookie默认保存在浏览器的缓存中,只要浏览器关闭Cookie就会消失。

	  - 我们可以设置Cookie的有效时间,设置了有效时间大于0,那么Cookie就会自动保存在客户端浏览器的硬盘上,有效时长必须大于0。有效时长到期后,Cookie自动失效。
	      
	      设置Cookie有效时长 < 0  不会被存储在硬盘中

	      设置Cookie有效时长 = 0  Cookie 会被直接删除

	      设置Cookie有效时长 > 0  Cookie存储在浏览器客户端硬盘文件中


	   - 具体设置Cookie有效时长代码:
	        
		// 设置cookie的有效时长
		cookie1.setMaxAge(60*60);
		cookie2.setMaxAge(60*60*24);


 * 浏览器提交Cookie给服务器,服务器怎么接收?
        
	 - 使用 Cookie[]    request.getCookies()  方法,  从request获取Cookies, 返回一个Cookie数组。
    
            //接收浏览器提交给服务器的Cookie
             Cookie[] cookies=request.getCookies();

            //输出Cookie
             int i=1;
               if(cookies!=null){
                  for (Cookie cookie:cookies) {
                     String cookieName=cookie.getName();      //获取cookie的name
                     String cookieValue=cookie.getValue();   // 获取cookie的value
                     System.out.println("第"+i+"个Cookie信息"+cookieName+"="+cookieValue);
                     i++;
                 }
             }
         }



  *  浏览器是可以禁用Cookie的,什么意思?
      
             - 表示服务器发送过来的cookie,客户端浏览器不接收。

             - 服务器还是会进行发送的,只不过是浏览器不接收了。


 
 * Cookie代码总结:

     ```
           public class CookieServlet extends HttpServlet {

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

                 //创建Cookie对象
                Cookie cookie1=new Cookie("userName","Morty");
                Cookie cookie2=new Cookie("password","123456");
                Cookie cookie3=new Cookie("email","1213@lkd");

                //设置Cookie的关联路径
                 cookie1.setPath(request.getContextPath());
                 cookie2.setPath(request.getContextPath());

                //将Cookie保存在浏览器客户端的硬盘文件中
                cookie1.setMaxAge(60*60*24);
                cookie2.setMaxAge(60*60*24);

                //将Cookie发送给浏览器客户端
                response.addCookie(cookie1);
                response.addCookie(cookie2);

                //浏览器将Cookie提交给服务器,那么服务器怎么接受Cookie呢?
                 Cookie[] cookies=request.getCookies();

                 // 遍历输出Cookie
                 if(cookies!=null){
                     for (Cookie cookie:cookies) {
                         System.out.println(cookie);
                     }
                 }
            }



































posted @ 2021-04-23 15:54  失昼  阅读(50)  评论(0)    收藏  举报