中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Cookie的工作原理和用法

發布時間:2021-06-21 13:45:38 來源:億速云 閱讀:349 作者:chen 欄目:開發技術

本篇內容介紹了“Cookie的工作原理和用法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • 1. Cookie 原理

    • 1.1 Cookie 背景信息

    • 1.2 Cookie 工作原理

    • 1.3 Cookie 創建、獲取、修改

    • 1.4 Cookie 共享范圍

    • 1.5 Cookie 生命周期

    • 1.6 Cookie 中文亂碼 - 解決方案

    • 1.7 Cookie 優缺特點分析

  • 2. Cookie 應用

    • 2.0 工具類:CookieUtils

    • 2.1 案例:記錄用戶上一次訪問時間

    • 2.2 案例:記錄商品的瀏覽歷史信息

1. Cookie 原理

1.1 Cookie 背景信息

客戶端狀態管理技術,將狀態信息保存在客戶端。網景公司發明,瀏覽器會話技術。一個Cookie只能標識一種信息,它至少含有一個標識該信息的名稱name和設置值value。瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個大小限制為4kb

1.2 Cookie 工作原理

Cookie的工作原理和用法

執行流程:

1.瀏覽器向服務器發送請求,服務器需要創建cookie,服務器會通過響應攜帶cookie,在產生響應時會產生Set-Cookie響應頭,從而將cookie信息傳遞給了瀏覽器;

2.當瀏覽器再次向服務器發送請求時,會產生cookie請求頭,將之前服務器的cookie信息再次發送給了服務器,然后服務器根據cookie信息跟蹤客戶端狀態。

1.3 Cookie 創建、獲取、修改

chrome谷歌瀏覽器查看cookie信息,瀏覽器地址欄輸入:

  • chrome://settings/content/cookies

  • chrome://settings/siteData

Cookie 創建:

// 用響應創建Cookie,等價于 response.addHeader("set-cookie", "name=value");
Cookie cookie = new Cookie(String name, String value); // Cookie: name=value
cookie.setMaxAge(seconds); // 設置Cookie的生命周期
cookie.setPath("/"); // 設置Cookie的共享范圍
response.addCookie(cookie); // 添加1個Cookie

Cookie 獲取:

// 用請求獲取Cookie
Cookie[] cookies = request.getCookies(); // 獲取Cookies返回數組
// 需遍歷
cookie.getName(); // 獲取鍵
cookie.getValue(); // 獲取值

Cookie 修改:

// 修改Cookie
cookie.setValue(String name);

1.4 Cookie 共享范圍

/ 當前項目下所有資源均可共享訪問該Cookie對象內容

/project/demo 當前項目下只有資源demo均可共享訪問該Cookie對象內容

設置 Cookie 數據共享范圍:

// 設置Cookie的共享范圍
cookie.setPath("/");

1.5 Cookie 生命周期

  • <0:瀏覽器會話結束/瀏覽器關閉,內存存儲(默認)

  • =0:失效

  • >0:生效時間,單位s

在生命周期內Cookie會跟隨任何請求,可通過設置路徑限制攜帶Cookie的請求資源范圍

設置 Cookie 數據生命周期:

// 設置Cookie生命周期,單位s
cookie.setMaxAge(int second); // 7天:7*24*60*60

1.6 Cookie 中文亂碼 - 解決方案

中文:Unicode,4個字節 英文:ASCII,2個字節

Cookie的中文亂碼需要進行編碼和解碼處理:

編碼:java.net.URLEncoder 的 URLEncoder.encode(String str, String encoding)

解碼:java.net.URLDecoder 的 URLDecoder.decode(String str, String encoding)

// 編碼
Cookie cookie = new Cookie(
        URLEncoder.encode("鍵", "utf-8"),
        URLEncoder.encode("值", "utf-8")
);
response.addCookie(cookie);
// 解碼
String keyStr = URLDecoder.decode(cookie.getName(), "utf-8");

1.7 Cookie 優缺特點分析

優點: ● 可配置到期規則:① 1次請求就失效 ②1次瀏覽器會話(關閉)失效 ③配置永久生效 ● 簡單性:基于文本的輕量結構,簡單鍵值對 ● 數據持久性:雖然Cookie可被客戶端瀏覽器的過期處理和干預,但Cookie通常也是客戶端上持續時間最長的數據保留形式缺點: ● 大小受到限制:大多數瀏覽器的Cookie只有4kb大小的限制 ● 用戶配置禁用:客戶瀏覽器設置了禁用接收Cookie的能力,限制了該功能 ● 潛在安全風險:用戶可能會操縱篡改瀏覽器上的Cookie,會造成Cookie應用程序執行失敗的問題

2. Cookie 應用

2.0 工具類:CookieUtils

public class CookieUtils {
    /**
     * 獲取指定名稱的Cookie對象
     * @param cookies 一組Cookie
     * @param cookieName 指定的Cookie名稱
     * @return 需要的Cookie
     */
    public static Cookie getCookie(Cookie[] cookies, String cookieName) {
        if (null != cookies && 0 != cookies.length) {
            for (Cookie ck : cookies) {
                if (cookieName.equals(ck.getName())) {
                    return ck;
                }
            }
        }
        return null;
    }
}

2.1 案例:記錄用戶上一次訪問時間

核心邏輯:

// 判斷是否是第一次請求
    Cookie cookie = CookieUtils.getCookie(request.getCookies(), "lastTime");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    if (null == cookie) {
        // 第一次訪問,打印當前時間,并創建Cookie,存儲當前時間
        Date date = new Date();
        System.out.println("第一次訪問時間:" + sdf.format(date));
        cookie = new Cookie("lastTime", String.valueOf(date.getTime()));
    } else {
        // 不是第一次訪問,從cookie去除上一次訪問時間,并打印,獲取當前時間,存儲cookie中
        long currTimeMills = Long.parseLong(cookie.getValue());
        System.out.println("上一次訪問時間:" + sdf.format(new Date(currTimeMills)));
        cookie.setValue(String.valueOf((new Date()).getTime()));
    }
    response.addCookie(cookie);

Cookie的工作原理和用法

2.2 案例:記錄商品的瀏覽歷史信息

歷史記錄核心邏輯:

String id = request.getParameter("id");
    Cookie cookie = CookieUtils.getCookie(request.getCookies(), "history");
    if (null == cookie) {
        // 木有瀏覽記錄:創建Cookie,并存儲瀏覽記錄
        cookie = new Cookie("history", id);
    } else {
        // 有瀏覽記錄
        String history = cookie.getValue();
        if (!history.contains(id)) {
            // 有瀏覽記錄,不包含當前瀏覽商品:將瀏覽商品拼接到已有的瀏覽記錄中
            history += "-" + id;
            cookie.setValue(history);
        }
        // 有瀏覽記錄,包含當前瀏覽商品則無需處理
    }
    response.addCookie(cookie);
    // 顯示商品瀏覽記錄,路徑:/demo/show
    response.sendRedirect(request.getContextPath() + File.separator + "show");

顯示歷史記錄信息:

// 獲取商品瀏覽記錄
        Cookie cookie = CookieUtils.getCookie(request.getCookies(), "history");
        StringBuffer respsb = new StringBuffer();
        if (null == cookie) {
            // 沒有瀏覽記錄
            respsb.append("<font color='red'>沒有瀏覽記錄</font>,");
            respsb.append("<a href='books.html'>瀏覽商品</a>");
        } else {
            // 有瀏覽記錄: 0-1-2-3
            String[] books = {"西游記", "紅樓夢", "水滸傳", "三國志"};
            String history = cookie.getValue();
            String[] historys = history.split("-");
            respsb.append("您的瀏覽記錄如下:<br>");
            for (String index : historys) {
                String bookName = books[Integer.parseInt(index)];
                respsb.append(bookName).append("<br>");
            }
        }
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println(respsb);

Cookie的工作原理和用法

點擊第一個后:

Cookie的工作原理和用法

“Cookie的工作原理和用法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岚皋县| 沙坪坝区| 上高县| 高邑县| 汝城县| 乳源| 青阳县| 长春市| 镇雄县| 太仓市| 安多县| 元阳县| 曲水县| 金塔县| 诸城市| 昌宁县| 彭水| 花垣县| 灵川县| 稻城县| 金堂县| 沂水县| 静海县| 忻州市| 获嘉县| 星子县| 洛浦县| 措美县| 肃宁县| 崇明县| 泰安市| 越西县| 六枝特区| 利津县| 芦山县| 始兴县| 苏州市| 盐池县| 宁都县| 唐河县| 镇远县|