前言:本篇學習筆記 來自B站動力節點官方號的 reyco老師的Servlet的視頻中的筆記和結論 一、 Cookie簡介 Cookie 是由 網景公司前雇員在 1993年發明的一種進行網路會話狀態跟蹤的技術。 會話是由一組請求響應組成,是圍繞一件相關的事情所進行的請求與相應。所以這些請求與響應之間是 ...
前言:本篇學習筆記 來自B站動力節點官方號的 reyco老師的Servlet的視頻中的筆記和結論
一、 Cookie簡介
Cookie 是由 網景公司前雇員在 1993年發明的一種進行網路會話狀態跟蹤的技術。
會話是由一組請求響應組成,是圍繞一件相關的事情所進行的請求與相應。所以這些請求與響應之間是一定有數據傳遞的,即需要進行會話跟蹤的。然而 HTTP 協議是一種無狀態協議,在不同的請求間 是無法進行數據傳遞的。此時需要一種可以進行請求間數據傳遞的會話跟蹤技術。
Cookie 是由伺服器生成,保存在客戶機的一種信息載體。這個載體中存放在用戶訪問該站點的會話狀態信息。只要 cookie 沒有被清除,或者 cookie 沒有失效,那麼存放在其中的會話狀態就有效。
用戶在提交第一次請求後,由伺服器生成 cookie ,並將其裝到 響應頭中 response,以響應的形式發送給客戶端,客戶端在收到響應後,將 cookie 保存到客戶端,當客戶端再次發送同類請求後,在請求中會攜帶保存在客戶端 的 cookie 數據,再次發送到服務端,服務端接受到相同同的狀態信息(cookie)並識別,服務端即可對對話進行跟蹤。
Cookie 技術並不是 javaweb 開發的專屬技術,而屬於 web開發的專屬技術,是所有 web 開發語言均支持的技術
Cookie 是由若幹鍵值對構成,這裡的鍵——一般稱為 name ,值稱為 value。Cookie 的 鍵和值 均為 字元串
二、火狐瀏覽器下查看 Cookie
不同的瀏覽器,其 Cookie 的保存位置及查看方式不一樣,刪除某一瀏覽器下的 cookie ,不會影響到其他瀏覽器的 cookie
火狐瀏覽器(版本35.0.1)可以直接看到 cookie的內容,查看位置在:(選項—>隱私—>移除單個 Cookie)
三、JAVAEE中 Cookie
在 Javaee 中的 javax.servlet.http 包中存在一個類 Cookie,就是用於完成會話跟蹤的 Cookie。其中只有一個帶參構造器:
public Cookie(String name,String value)
而 httpServletResponse 中有一個方法,可以將 Cookie 添加到 相應頭中:
public void addCookie(Cookie cookie)
註意,一個response 中可以添加多個 Cookie 鍵值對。
1)創建 Cookie
Cookie cookie1 = new Cookie("username","chens"); Cookie cookie2 = new Cookie("username","chens");
2)預設綁定路徑
訪問路徑由資源名稱與資源路徑構成。預設情況下,Cookie 與訪問路徑中的資源路徑綁定,只要用戶發出帶有綁定資源路徑(等同於同類請求)的請求,則在請求頭部,將自動攜帶 與之綁定的 Cookie 數據
3)自定義路徑
通過Cookie 類中的方法 public void setPath(String path) ,設置指定路徑
//註意:這裡指定的路徑必須加上項目名稱 cookie1.setPath(request.getContextPath() + "/xxx/ooo/some"); cookie2.setPath(request.getContextPath() + "/aaa");
4)設置Cookie的保存時長,單位為秒
//註意:時長=0或<0時或未指定時,規定在會話結束是失效 Cookie1.setMaxAge(60*60)//一小時
5)將 Cookie 添加到響應頭
Response.addCookie(cookie1);
Response.addCookie(cookie2);
運行結果:
訪問你的servlet,並且用火狐查看cookie
值得註意的是,passward(cookie2)沒有指定 cookie 保存時間預設在會話結束失效。
6)接收 Cookie
當訪問到 Cookie 指定路徑時,Cookie將會被包裝request中,我們可以通過 request 中的 getCookie 獲取到
在相同項目中另一個servlet獲取到傳輸過來的cookie
//獲取 cookie Cookie[] cookies = request.getCookies(); //遍歷 cookie for(Cookie cookie:cookies) { System.out.println(cookie.getName() + cookie.getValue()); }
好了,本篇的學習結束