日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaWeb Cookie详解

發布時間:2025/3/19 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb Cookie详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼地址如下:
http://www.demodashi.com/demo/12713.html

Cookie的由來

首先我們需要介紹一下,在Web開發過程中為什么會引入Cookie。我們知道Http協議是一種無狀態協議,
Web服務器本身不能識別出哪些請求是同一個瀏覽器發出的,瀏覽器的每一次請求都是完全孤立的。
即便在Http1.1支持了持續連接,但當用戶有一段時間沒有提交請求時,連接也會自動關閉。這時,作為Web服務器,
必須采用一種機制來唯一標識一個用戶,同時記錄該用戶的狀態。于是就引入了第一種機制:Cookie機制。

Cookie機制: 采用的是在客戶端保持Http狀態的方案。

Cookie的定義即基本介紹

Cookie是在瀏覽器訪問WEB服務器的某個資源時,
由WEB服務器在HTTP響應消息頭中附帶傳送給瀏覽器的一個小文本文件。

  • 一旦WEB瀏覽器保存了某個Cookie,
    那么它在以后每次訪問該WEB服務器時,
    都會在HTTP請求頭中將這個Cookie回傳給WEB服務器。
  • 一個Cookie只能標識一種信息,
    它至少含有一個標識該信息的名稱(NAME)和設置值(VALUE)。
  • 一個WEB站點可以給一個WEB瀏覽器發送多個Cookie,
    一個WEB瀏覽器也可以存儲多個WEB站點提供的Cookie。
  • 瀏覽器一般只允許存放300個Cookie,
    每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB。
  • Cookie的原理

    底層的實現原理: WEB服務器通過在HTTP響應消息中增加Set-Cookie響應頭字段將Cookie信息發送給瀏覽器,
    瀏覽器則通過在HTTP請求消息中增加Cookie請求頭字段將Cookie回傳給WEB服務器。

    Cookie的傳送過程示意圖

  • Servlet API中提供了一個javax.servlet.http.Cookie類來封裝Cookie信息,它包含有生成Cookie信息和提取Cookie信息的各個屬性的方法。
  • Cookie類的方法:
    • 構造方法: public Cookie(String name,String value)
    • getName方法
    • setValue與getValue方法
    • setMaxAge與getMaxAge方法
    • setPath與getPath方法
  • HttpServletResponse接口中定義了一個addCookie方法,它用于在發送給瀏覽器的HTTP響應消息中增加一個Set-Cookie響應頭字段。
  • HttpServletRequest接口中定義了一個getCookies方法,它用于從HTTP請求消息的Cookie請求頭字段中讀取所有的Cookie項。
  • Cookie的發送

  • 創建Cookie對象
  • 設置最大時效
  • 將Cookie放入到HTTP響應報頭
    • 如果創建了一個cookie,并將他發送到瀏覽器,默認情況下它是一個會話級別的cookie; 存儲在瀏覽器的內存中,用戶退出瀏覽器之后被刪除。
      若希望瀏覽器將該cookie存儲在磁盤上,則需要使用maxAge,并給出一個以秒為單位的時間。將最大時效設為0則是命令瀏覽器刪除該cookie。
    • 發送cookie需要使用HttpServletResponse的addCookie方法,將cookie插入到一個 Set-Cookie HTTP響應報頭中。
      由于這個方法并不修改任何之前指定的Set-Cookie報頭,而是創建新的報頭,因此將這個方法稱為是addCookie,而非setCookie。
  • Cookie的讀取

  • 調用request.getCookies要獲取瀏覽器發送來的cookie,需要調用HttpServletRequest的getCookies方法,
    這個調用返回Cookie對象的數組,對應由HTTP請求中Cookie報頭輸入的值。
  • 對數組進行循環,調用每個cookie的getName方法,直到找到感興趣的cookie為止。
  • 會話cookie和持久cookie的區別

  • 如果不設置過期時間,則表示這個cookie生命周期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。
    這種生命期為瀏覽器會話期的cookie被稱為會話cookie。
    會話cookie一般不保存在硬盤上而是保存在內存里。
  • 如果設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉后再次打開瀏覽器,這些cookie依然有效直到超過設定的過期時間。
    設置過期時間: setMaxAge(param) param為具體的時間,單位為秒。
  • 存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,
    比如兩個IE窗口。而對于保存在內存的cookie,不同的瀏覽器有不同的處理方式。
  • 具體實現

    實現自動登錄過程

    //正常登錄進入該頁面,name是存在的String name = request.getParameter("name");String check = request.getParameter("checked");if(name == null || name.equals("")){//判斷cookie存不存在Cookie[] cookies = request.getCookies();if(cookies != null && cookies.length > 0){for(Cookie cookie : cookies){String cookieName = cookie.getName();if(cookieName.equalsIgnoreCase("demoname")){name = cookie.getValue();break;}} }//不存在說明cookie過期或者非法訪問,否則輸出正確內容if(name == null || name.equals("")){response.sendRedirect("demo1.jsp"); }else{Cookie cookie = new Cookie("demoname",name);cookie.setMaxAge(60);response.addCookie(cookie);//設置持久化cookie,存儲在磁盤中out.println("hello " + name + "\n");out.println(System.currentTimeMillis());}}else{if(check != null && check.equalsIgnoreCase("on")){Cookie cookie = new Cookie("demoname",name);cookie.setMaxAge(60);//設置持久化cookieresponse.addCookie(cookie);}out.println("hello " + name + "\n");out.println(System.currentTimeMillis());}

    實現最近瀏覽記錄功能

    //把書的信息以 Cookie 方式傳回給瀏覽器,刪除一個 Cookie//1. 確定要被刪除的 Cookie: tommyyangcn開頭的 Cookie數量大于或等于 5,//且若從 books.jsp 頁面傳入的 book不在 tommyyangcn開頭的 Cookie集合中則刪除較早的那個 Cookie(tommyyangcn開頭的Cookie集合的第一個 Cbookie),若在其中,則刪除該 Cookie//2. 把從 books.jsp 傳入的 book 作為一個 Cookie 返回final String cookieFinalName = "tommyyangcn"; //使用List(隊列機制)存儲cookie,第一個是訪問時間最久的List<Cookie> bookList = new ArrayList<Cookie>();String bookName = request.getParameter("bookName");out.print("歡迎在線觀看:" + bookName);Cookie[] cookies = request.getCookies();Cookie tempCookie = null;if(cookies != null && cookies.length > 0){for(Cookie cookie : cookies){ String thisCookieName = cookie.getName();//填充cookie的存儲空間if(thisCookieName.startsWith(cookieFinalName)){bookList.add(cookie);}//看當前書籍是否在cookie數組中if(cookie.getValue().equals(bookName)){tempCookie = cookie; }}}//說明當前書籍不在cookie數組中,則將當前書籍加入最近瀏覽的cookie數組中,同時刪除訪問時間最久的書籍,對于list集合來說,即第一個if(tempCookie == null && bookList.size() > 0){tempCookie = bookList.get(0);}//tommyyangcn開頭的 Cookie數量大于或等于 5,刪除需要刪除的那個cookie,即tempCookieif(bookList.size() >= 5 && tempCookie != null){tempCookie.setMaxAge(0);response.addCookie(tempCookie);}Cookie cookie = new Cookie(cookieFinalName + bookName, bookName);response.addCookie(cookie);

    How to run code

  • 將代碼clone到本地,使用eclipse導入代碼,導入的時候項目的類型選擇"git project"。
  • 右鍵項目 run on Server。
  • 法二: 將項目中WebContent中的內容拷入你的Tomccat服務器下的webapps目錄下你建的站點名,
    然后啟動tomcat服務器,
    在瀏覽器中輸入: http://localhost:8080/站點名,即可訪問

    Tomcat目錄下的webapps目錄如下:

    站點頁面展示

    項目文件結構截圖

    JavaWeb Cookie詳解

    代碼地址如下:
    http://www.demodashi.com/demo/12713.html

    注:本文著作權歸作者,由demo大師代發,拒絕轉載,轉載需要作者授權

    總結

    以上是生活随笔為你收集整理的JavaWeb Cookie详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。