Cookie基本介绍

1.Http协议

        Http协议两个缺陷:
            1.HTTP协议是纯文本的
            2.HTTP协议是无状态的
                服务器不能简单的通过HTTP协议来区分多次请求是否发自同一个用户
            虽然通过HTTP协议不能区分不同请求是否来同一用户,但是我们实际生活却有这样的需求。

2. Cookie
         简介:
  (1)我们想可以通过服务器向浏览器发送一个类似票的东西,
                    浏览器在访问服务器时就可以拿着票来访问
                        服务器就可以根据这个票来识别不同的用户。
  (2)服务器发送给浏览器的这张票我们称为Cookie。
  (3)Cookie的使用流程:
              ①.服务器先要创建Cookie
              ②.将Cookie发送给浏览器
            ③.浏览器带着Cookie访问服务器
               ④.服务器检查浏览器的Cookie
   (4)Cookie实际上就是一个头
                服务器通过响应头将Cookie发送给浏览器,
                    浏览器通过请求头将Cookie发回给服务器,
                        服务器可以根据不同的Cookie来识别不同的用户。
   (5)使用Cookie
            ① 创建Cookie
                Cookie cookie = new Cookie(name,value);
                
            ② 发送Cookie    
                response.addCookie(cookie);
                注意:可以发送多个cookie!
                
            ③ 读取Cookie
                request.getCookies(); 返回的是一个Cookie数组。
                - 虽然Cookie是一个键值对结构,但是它并没有给咱们提供一个根据键获取值的方法。
                    我们要想读取Cookie的信息,只能通过遍历数组。
            
            ④ 修改Cookie
                一旦Cookie发给浏览器以后,服务器便不能直接修改Cookie,
                    但是可以通过使用同名Cookie来替换的老Cookie方式来间接的修改
            
   (6) Cookie的有效时间
            ①Cookie的默认有效时间为一次会话,当关闭浏览器时,Cookie将失效。


            ②通过setMaxAge(秒数)来设置Cookie的有效时间


            ③当秒数大于0时,有效时间会设置为相应的秒数
                cookie.setMaxAge(30);


            ④当秒数等于0时,代表Cookie立即失效,浏览器不会保存。
                cookie.setMaxAge(0);


            ⑤当秒数小于0时,和不设置是一样,一次会话中有效
                cookie.setMaxAge(-100);


            ⑥设置一个长久有效的Cookie
                cookie.setMaxAge(60*60*24*365*10)


            ⑦在程序中使Cookie立即失效
                - 可以使用一个同名的,立即失效的Cookie来替换已有Cookie

            注意:不建议在cookie中传递中文,会用base64编码!
            
          代码示例:

 1 package com.neuedu.cookie;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.Cookie;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 
12 public class CookieServlet extends HttpServlet {
13     private static final long serialVersionUID = 1L;
14        
15  
16     public CookieServlet() {
17         super();
18        
19     }
20 
21 
22     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
23 
24         Cookie cookie=new Cookie("gender", "male");    //创建Cookie
25         cookie.setMaxAge(60*3);              //设置Cookie的有效时间
26         response.addCookie(cookie);            //发送Cookie  
27         Cookie[] cookies = request.getCookies();     //读取Cookie
28         if(cookies!=null){
29             for(int i=0;i<cookies.length;i++){
30                 if("gender".equals(cookies[i].getName())){
31                     cookies[i].setValue("female");  //修改cookie信息
32                     response.addCookie(cookies[i]);
33                 }
34             }
35         }
36         
37         
38     }
39 
40     
41     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
42         doGet(request, response);
43     }
44 
45 }

通过火狐浏览器查看Cookie信息


  (7) Cookie的Path
           path指的Cookie的路径
           所谓的Cookie路径就是指,浏览器在访问哪些地址时会携带Cookie。
            ①Cookie默认有效路径是项目的根目录,只要访问当前项目下的资源就会带着Cookie
            ②通过setPath()方法来设置Cookie有效路径
            ③修改Cookie的有效路径
            //Cookie的路径由浏览器解析,所以设置路径时需要加上项目名
            cookie.setPath(request.getContextPath()+"/hello");
        
   (8)Cookie 应用:
            1.可以用来保持用户的登录状态
            2.可以用来记录用户上次输入的用户名
            3.广告的推送

原文地址:https://www.cnblogs.com/double-s/p/8120687.html