Cookie

爲什麼要有cookie

瀏覽器和客戶端之間通信,少不了HTTP,但是HTTP是無協議的,服務器不知道上一次瀏覽器做了些什麼操作,於是誕生了cookie

什麼是cookie

cookie是一個存儲在瀏覽器的文本文件,存儲着用戶信息,cookie也稱爲瀏覽器會話技術。
每個請求添加Cookie HTTP請求頭髮送回服務器

組成

Cookie是一段不超過4KB的小型文本數據,由一個名稱(Name)、一個值(Value)和其它幾個用於控制Cookie有效期、安全性、使用範圍的可選屬性組成.

  1. Name/Value:設置Cookie的名稱及相對應的值。
  2. Expires屬性:設置Cookie的生存期。有兩種存儲類型的Cookie:會話性與持久性。Expires屬性缺省時,爲會話性Cookie,僅保存在客戶端內存中,並在用戶關閉瀏覽器時失效;持久性Cookie會保存在用戶的硬盤中,直至生存期到或用戶直接在網頁中單擊“註銷”等按鈕結束會話時纔會失效
  3. Path屬性:定義了Web站點上可以訪問該Cookie的目錄
  4. Domain屬性:指定了可以訪問該 Cookie 的 Web 站點或域,Cookie 機制並未遵循嚴格的同源策略,允許一個子域可以設置或獲取其父域的 Cookie。
  5. Secure屬性:指定是否使用HTTPS安全協議發送Cookie
  6. HTTPOnly 屬性:如果爲true,那麼通過js腳本將無法讀取到cookie信息。

cookie機制

在這裏插入圖片描述

  1. 用戶第一次訪問訪問網站時,發出一個http請求
  2. 服務器發送一個HttpResponse響應到客戶端,其中包含Set-Cookie的頭部
  3. 瀏覽器保持cookie,第二次請求Http請求中會包含一個Cookie的頭部
  4. 服務器響應,返回數據

添加cookie

  /**
     * 設置cookie
     *
     * @param response
     * @param name     cookie名字
     * @param value    cookie值
     * @param maxAge   cookie生命週期 以秒爲單位
     */
    public static void addCookie(HttpServletResponse response,String domain,String path, String name,
                                 String value, int maxAge,boolean httpOnly) {
        Cookie cookie = new Cookie(name, value);
        cookie.setDomain(domain);
        cookie.setPath(path);
        cookie.setMaxAge(maxAge);
        cookie.setHttpOnly(httpOnly);
        response.addCookie(cookie);
    }

獲取cookie

 /**
     * 根據cookie名稱讀取cookie
     * @param request
     * @param cookieName1,cookieName2
     * @return map<cookieName,cookieValue>
     */

    public static Map<String,String> readCookie(HttpServletRequest request,String ... cookieNames) {
        Map<String,String> cookieMap = new HashMap<String,String>();
            Cookie[] cookies = request.getCookies();
            if (cookies != null) {
                for (Cookie cookie : cookies) {
                    String cookieName = cookie.getName();
                    String cookieValue = cookie.getValue();
                    for(int i=0;i<cookieNames.length;i++){
                        if(cookieNames[i].equals(cookieName)){
                            cookieMap.put(cookieName,cookieValue);
                        }
                    }
                }
            }
        return cookieMap;

    }

刪除cookie

   if (null != cookie) {
            cookie.setMaxAge(0);
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章