tft每日頭條

 > 圖文

 > 寫入cookie需要什麼

寫入cookie需要什麼

圖文 更新时间:2025-08-22 14:16:33

cookie 簡介

什麼是 cookie

cookie,有時我們也用其複數形式 cookies,是服務端保存在浏覽器端的數據片段。以 key/value的形式進行保存。每次請求的時候,請求頭會自動包含本網站此目錄下的 cookie 數據。網站經常使用這個技術來識别用戶是否登陸等功能。

簡單的說,cookie 就是服務端留給計算機用戶浏覽器端的小文件。

  • HTTP 是無狀态協議,服務器不能記錄浏覽器的訪問狀态,也就是說服務器不能區分中兩次請求是否由一個客戶端發出。這樣的設計嚴重阻礙的 Web 程序的設計。如:在我們進行網購時,買了一條褲子,又買了一個手機。由于 http 協議是無狀态的,如果不通過其他手段,服務器是不能知道用戶到底買了什麼。而 Cookie 就是解決方案之一。
  • Cookie 實際上就是服務器保存在浏覽器上的一段信息。浏覽器有了 Cookie 之後,每次向服務器發送請求時都會同時将該信息發送給服務器,服務器收到請求後,就可以根據 該信息處理請求。
  • 例如:我們上文說的網上商城,當用戶向購物車中添加一個商品時,服務器會将這個條信息封裝成一個 Cookie 發送給浏覽器,浏覽器收到 Cookie,會将它保存在内存中(注意這裡的内存是本機内存,而不是服務器内存),那之後每次向服務器發送請求,浏覽器都會攜帶該 Cookie,而服務器就可以通過讀取 Cookie 來判斷用戶到底買了哪些商品。當用戶進行結賬操作時,服務器就可以根據 Cookie 的信息來做結算。
  • Cookie 的用途: 網上商城的購物車 保持用戶登錄狀态
  • Cookie 的缺點

Cookie 做為請求或響應報文發送,無形中增加了網絡流量。

Cookie 是明文傳送的安全性差。

Cookie 中保存數據是不穩定的,用戶可以随時清理 cookie,各個浏覽器對 Cookie 有限制,使用上有局限

廬山真面目

chrome 的 cookie 位置:

C:\Users\lfy\AppData\Local\Google\Chrome\User Data\Default\Cookies

ie 中 cookie 位 置 : C:\Users\lfy\AppData\Local\Microsoft\Windows\InetCache 點擊設置->查看對象即可

chrome 中查看 cookie

寫入cookie需要什麼(一文帶你超詳細了解Cookie)1

cookie 如上圖所示

從上圖可以看出 cookie 是鍵值對的形式,有過期時間(Max-Age,session 表示在這個會話期内有效)。

cookie 原理

1)總的來看 Cookie 像是服務器發給浏覽器的一張“會員卡”,浏覽器每次向服務器發送請求時都會帶着這張“會員卡”,當服務器看到這張“會員卡”時就可以識别浏覽器的身份。實際上這個所謂的“會員卡”就是服務器發送的一個響應頭:

寫入cookie需要什麼(一文帶你超詳細了解Cookie)2

2)如圖 Set-Cookie 這個響應頭就是服務器在向服務器發“會員卡”,這個響應頭的名字是 Set-Cookie , 後 邊 JSESSIONID=95A92EC1D7CCB4ADFC24584CB316382E 和 Path=/Test_cookie,是兩組鍵值對的結構就是服務器為這個“會員卡”設置的信息。浏覽器收到該信息後就會将它保存到内存或硬盤中。

3)當浏覽器再次向服務器發送請求時就會攜帶這個 Cookie 信息:

寫入cookie需要什麼(一文帶你超詳細了解Cookie)3

寫入cookie需要什麼(一文帶你超詳細了解Cookie)4

回到頂部

Cookie 的使用

創建對象

cookie 是由服務端創建的,由浏覽器端保存的。所以創建對象我們應該在服務端創建 cookie,cookie 的創建方法:

1)創建一個 CookieServlet

在 Servlet 的 doPost()方法中編寫如下代碼:

//創建一個Cookie對象 Cookie cookie = new Cookie("username", "zhangsan"); //将Cookie對象放入response對象中response.addCookie(cookie);

2)在浏覽器中訪問該 Servlet,會發現響應頭中出現如下内容: Set-Cookie: username=zhangsan

如此就成功的向浏覽器設置了一個 Cookie,當我們在刷新頁面時會發現浏覽器的請求頭中出現如下代碼:

Cookie: username=zhangsan

3)同樣我們還可以同時設置多個 Cookie:

//創建一個Cookie對象 Cookie cookie1 = new Cookie("username", "zhangsan"); Cookie cookie2 = new Cookie("password", "123456"); Cookie cookie3 = new Cookie("age", "20"); //将Cookie對象放入response對象中 response.addCookie(cookie1); response.addCookie(cookie2); response.addCookie(cookie3);

浏覽器會按以下形式發送 Cookie:

Cookie: username=zhangsan; password=123456; age=20

4)設置 Cookie 就是兩個步驟: 創建 Cookie 對象

将 Cookie 對象加入到 response 中

設置 cookie

cookie 的有效時間

1)經過上邊的介紹我們已經知道 Cookie 是存儲在浏覽器中的,但是可想而知一般情況下浏覽器不可能永遠保存一個Cookie,一來是占用硬盤空間,再來一個 Cookie 可能隻在某一時刻有用沒必要長久保存。

2) 所以我們還需要為 Cookie 設置一個有效時間。

3)通過 Cookie 對象的 setMaxAge()可以設置 Cookie 的有效時間。

其中 setMaxAge()接收一個 int 型的參數,來設置有效時間。參數主要有一下四種情況:

  • 設置為 0,setMaxAge(0)

Cookie 立即失效,下次浏覽器發送請求将不會在攜帶該 Cookie

  • 設置大于 0,setMaxAge(60)

表示有效的秒數 60 就代表 60 秒即 1 分鐘,也就是 Cookie 在 1 分鐘後失效。

  • 設置小于 0,setMaxAge(-1)

設置為負數表示當前會話有效。也就是關閉浏覽器後 Cookie 失效

  • 不設置

如果不設置失效時間,則默認當前會話有效。

cookie 的路徑

1) Cookie 的路徑指告訴浏覽器訪問那些地址時該攜帶該 Cookie,我們知道浏覽器會保存很多不同網站的 Cookie,比如百度的 Cookie,新浪的 Cookie,騰訊的 Cookie 等等。那我們不可能訪問百度的時候攜帶新浪的 Cookie,也不可能訪問每個網站時都帶上所有的 Cookie 這是不現實的,所以往往我們還需要為 Cookie 設置一個 Path 屬性,來告訴浏覽器何時攜帶該Cookie。

2)我們同過 Cookie 的 setPath()來設置路徑,這個路徑是由浏覽器來解析的所以/代表服務器的根目錄。

如:設置為 /項目名/路徑 cookie.setPath(“/項目名/路徑”),這樣設置隻有訪問“/項目名/路徑”下的的資源才會攜帶 Cookie

如:/項目名/路徑/1.jsp 、/項目名/路徑/hello/2.jsp 等

如果不設置,默認會在訪問“/項目名”下的資源時攜帶如:“/項目名/index.jsp” 、 “/項目名/hello/index.jsp”

Cookie cookie = new Cookie("username", "abc"); cookie.setMaxAge(60*60*24);//秒為單位,一天後過期 cookie.setPath(getServletContext().getContextPath() "/"); resp.addCookie(cookie); resp.sendRedirect(getServletContext().getContextPath() "/index.jsp");

推薦博客

程序員寫代碼之外,如何再賺一份工資?

讀取 cookie

通過以上步驟,我們将 cookie 保存到了浏覽器端。那麼我們如何讀取 cookie 中的值呢。分析:

cookie 被設置進入浏覽器後,每次請求都會攜帶 cookie 的值,所以我們需要從 request 中取出 cookie 進行解析。

//從request中獲取所有cookie Cookie[] cookies = request.getCookies(); //遍曆cookie for(Cookie c:cookies){   String cName = c.getName();//獲取cookie名String cValue = c.getValue();//獲取cookie值   System.out.println("cookie:" cName "=" cValue); }

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved