天天看點

卷妹的成長日記之javaweb day13

卷妹的成長日記之javaweb day13

👩‍💻部落格首頁:京與舊鋪的部落格首頁

✨歡迎關注🖱點贊🎀收藏⭐留言✒

🔮本文由京與舊鋪原創,csdn首發!

😘系列專欄:java學習

👕參考網站:動力節點

💻首發時間:🎞2022年8月27日🎠

🎨你做三四月的事,八九月就會有答案,一起加油吧

🀄如果覺得部落客的文章還不錯的話,請三連支援一下部落客哦

Cookie

  • session的實作原理中,每一個session對象都會關聯一個sessionid,例如:
  • JSESSIONID=41C481F0224664BDB28E95081D23D5B8
  • 以上的這個鍵值對資料其實就是cookie對象。
  • 對于session關聯的cookie來說,這個cookie是被儲存在浏覽器的“運作記憶體”當中。
  • 隻要浏覽器不關閉,使用者再次發送請求的時候,會自動将運作記憶體中的cookie發送給伺服器。
  • 例如,這個Cookie: JSESSIONID=41C481F0224664BDB28E95081D23D5B8就會再次發送給伺服器。
  • 伺服器就是根據41C481F0224664BDB28E95081D23D5B8這個值來找到對應的session對象的。
  • cookie怎麼生成?cookie儲存在什麼地方?cookie有啥用?浏覽器什麼時候會發送cookie,發送哪些cookie給伺服器???????
  • cookie最終是儲存在浏覽器用戶端上的。
  • 可以儲存在運作記憶體中。(浏覽器隻要關閉cookie就消失了。)
  • 也可以儲存在硬碟檔案中。(永久儲存。)
  • cookie有啥用呢?
  • cookie和session機制其實都是為了儲存會話的狀态。
  • cookie是将會話的狀态儲存在浏覽器用戶端上。(cookie資料存儲在浏覽器用戶端上的。)
  • session是将會話的狀态儲存在伺服器端上。(session對象是存儲在伺服器上。)
  • 為什麼要有cookie和session機制呢?因為HTTP協定是無狀态 無連接配接協定。
  • cookie的經典案例
  • 京東商城,在未登入的情況下,向購物車中放幾件商品。然後關閉商城,再次打開浏覽器,通路京東商城的時候,購物車中的商品還在,這是怎麼做的?我沒有登入,為什麼購物車中還有商品呢?
  • 将購物車中的商品編号放到cookie當中,cookie儲存在硬碟檔案當中。這樣即使關閉浏覽器。硬碟上的cookie還在。下一次再打開京東商城的時候,檢視購物車的時候,會自動讀取本地硬碟中存儲的cookie,拿到商品編号,動态展示購物車中的商品。
  • 京東存儲購物車中商品的cookie可能是這樣的:productIds=xxxxx,yyyy,zzz,kkkk
  • 注意:cookie如果清除掉,購物車中的商品就消失了。
  • 126郵箱中有一個功能:十天内免登入
  • 這個功能也是需要cookie來實作的。
  • 怎麼實作的呢?
  • 使用者輸入正确的使用者名和密碼,并且同時選擇十天内免登入。登入成功後。浏覽器用戶端會儲存一個cookie,這個cookie中儲存了使用者名和密碼等資訊,這個cookie是儲存在硬碟檔案當中的,十天有效。在十天内使用者再次通路126的時候,浏覽器自動送出126的關聯的cookie給伺服器,伺服器接收到cookie之後,擷取使用者名和密碼,驗證,通過之後,自動登入成功。
  • 怎麼讓cookie失效?
  • 十天過後自動失效。
  • 或者改密碼。
  • 或者在用戶端浏覽器上清除cookie。
  • cookie機制和session機制其實都不屬于java中的機制,實際上cookie機制和session機制都是HTTP協定的一部分。php開發中也有cookie和session機制,隻要是你是做web開發,不管是什麼程式設計語言,cookie和session機制都是需要的。
  • HTTP協定中規定:任何一個cookie都是由name和value組成的。name和value都是字元串類型的。
  • 在java的servlet中,對cookie提供了哪些支援呢?
  • 提供了一個Cookie類來專門表示cookie資料。jakarta.servlet.http.Cookie;
  • java程式怎麼把cookie資料發送給浏覽器呢?response.addCookie(cookie);
  • 在HTTP協定中是這樣規定的:當浏覽器發送請求的時候,會自動攜帶該path下的cookie資料給伺服器。(URL。)
  • 關于cookie的有效時間
  • 怎麼用java設定cookie的有效時間
  • cookie.setMaxAge(60 * 60); 設定cookie在一小時之後失效。
  • 沒有設定有效時間:預設儲存在浏覽器的運作記憶體中,浏覽器關閉則cookie消失。
  • 隻要設定cookie的有效時間 > 0,這個cookie一定會存儲到硬碟檔案當中。
  • 設定cookie的有效時間 = 0 呢?
  • cookie被删除,同名cookie被删除。
  • 設定cookie的有效時間 < 0 呢?
  • 儲存在運作記憶體中。和不設定一樣。
  • 關于cookie的path,cookie關聯的路徑:
  • 假設現在發送的請求路徑是“http://localhost:8080/servlet13/cookie/generate”生成的cookie,如果cookie沒有設定path,預設的path是什麼?
  • 預設的path是:http://localhost:8080/servlet13/cookie 以及它的子路徑。
  • 也就是說,以後隻要浏覽器的請求路徑是http://localhost:8080/servlet13/cookie 這個路徑以及這個路徑下的子路徑,cookie都會被發送到伺服器。
  • 手動設定cookie的path
  • cookie.setPath(“/servlet13”); 表示隻要是這個servlet13項目的請求路徑,都會送出這個cookie給伺服器。
  • 浏覽器發送cookie給伺服器了,伺服器中的java程式怎麼接收?
Cookie[] cookies = request.getCookies(); // 這個方法可能傳回null
if(cookies != null){
    for(Cookie cookie : cookies){
        // 擷取cookie的name
        String name = cookie.getName();
        // 擷取cookie的value
        String value = cookie.getValue();
    }
}      
  • 使用cookie實作一下十天内免登入功能。
  • 先實作登入功能
  • 登入成功
  • 跳轉到部門清單頁面
  • 登入失敗
  • 跳轉到登入失敗頁面
  • 修改前端頁面
  • 在登入頁面給一個複選框,複選框後面給一句話:十天内免登入。
  • 使用者選擇了複選框:表示要支援十天内免登入。
  • 使用者沒有選擇複選框:表示使用者不想使用十天内免登入功能。
  • 修改Servlet中的login方法
  • 如果使用者登入成功了,并且使用者登入時選擇了十天内免登入功能,這個時候應該在Servlet的login方法中建立cookie,用來存儲使用者名和密碼,并且設定路徑,設定有效期,将cookie響應給浏覽器。(浏覽器将其自動儲存在硬碟檔案當中10天)
  • 使用者再次通路該網站的時候,通路這個網站的首頁的時候,有兩個走向:
  • 要麼跳轉到部門清單頁面
  • 要麼跳轉到登入頁面
  • 以上分别有兩個走向,這顯然是需要編寫java程式進行控制的。