📑
scrapbook
  • Introduction
  • 1. Concept
  • 1.1 EAI
  • 1.2 ESB
  • 1.3 EAI v.s. ESB
  • 1.4 SOA
  • 1.5 RESTful
  • 1.6 Microservices
  • 1.7 Microservice v.s. SOA
  • 1.8 Maintain HTTP State
  • 1.8.1 Cookie
  • 1.8.2 Session
  • 1.9 Put, Add, and Set
  • 1.10 Public Key & Private Key
  • 1.11 Message Digest & Hash Function
  • 1.12 Diffie - Hellman Key Exchange
  • 1.13 About IoC
  • 1.14 About AOP
  • 1.15 Spring - Pros and Cons
  • 1.16 Spring - Prototype in Singleton
  • 1.17 HTTP v.s. SPDY
  • 1.18 HTTP/2
  • 1.19 Securing REST Services
  • 1.20 Conway's Law
  • 1.21 大型網站架構演化發展歷程
  • 1.22 Java Generics
  • 1.23 MySQL HA經驗談
  • 2. Questions & Solutions
  • 2.1 海底撈幾根針
  • 2.2 塞不進去
  • 3. Relational Database
  • 3.1 SQL Join Type
  • 3.2 SQL Injection
  • 3.3 MySQL CHAR v.s. VARCHAR
  • 4. NoSQL
  • 4.1 CAP Theorem, ACID v.s. BASE
  • 4.2 Two-Phase-Commit
  • 4.3 RDB v.s. NoSQL
  • 4.4 Structured, Unstructured and Semi-structured Data
  • 4.5 Shard v.s. Replica
  • 4.6 ArrayList v.s. LinkedList
  • 4.7 HashSet v.s. TreeSet
  • 4.8 HashMap v.s. TreeMap
  • 4.9 ArrayList v.s. Vector
  • 4.10 HashMap v.s. HashTable
  • 4.11 Statement, PreparedStatement and CallableStatement
  • 4.12 Overflow of Digits
  • X. JVM
  • X.1 JVM System Threads
  • X.2 Garbage Collection
Powered by GitBook
On this page

Was this helpful?

1.8.1 Cookie

Cookie是透過client端來保持狀態的解決方案. 從定義上來看, Cookie就是由server發給client的特殊訊息, 而這些訊息以text file的方式存放在client, 而client每次向server發出request的時候都會帶上這些特殊訊息. 換個說法: 當使用者透過瀏覽器存取一個支持Cookie的網站的時候, 使用者會提供包括用戶名在內的私人訊息並且傳送至server; 接著, server在向client回傳相應的超文字的同時也會送回這些私人訊息, 而這些訊息不會存放在HTTP response body中, 它們會被存放在HTTP response header中; 當client端的瀏覽器收到response之後, 瀏覽器會將這些訊息存放在一個統一的位置, 以OSX來說, safari瀏覽器會把cookie放在"~/Library/Cookies"這個資料夾下; 自此, client再度向server發出請求的時候, 都會把相應的Coockie再次發回至server. 不過這次Cookie訊息則會被存放在HTTP request header中了.

有了Cookie這樣的技術後, server在接收到來自client的request之後, 就能夠通過分析存放於request header中的Cookie進而得到client特有的訊息, 從而動態生成與該client相對應的內容. 試著回想一下, 你可能在很多網站的登入頁面都看過"記住我"這樣的選項, 如果你勾選了它之後再登入, 那麼在下一次訪問該網站的時候就不需要進行重複的登入動作了, 這功能基本上就是透過Cookie實現的.

在Servlet中可以透過Cookie類別來建立Cookie:

Cookie cookie = new Cookie("user", "RuRu");
cookie.setMaxAge(7 * 24 * 60 * 60); // 一星期內有效
response.addCookie(cookie);

HTTP中Cookie的設定是透過set-cookie header,所以必須在實際回覆瀏覽器之前使用addCookie()來新增Cookie實例, 在瀏覽器輸出HTML回應之後再執行addCookie()是沒有作用的.

若要取得client端上儲存的Coockie, 則可以透過HttpServletRequest的getCookies(), 如此就可以取得屬於該網頁所屬domain的所有Cookie, 所以回傳值是一個Cookie[] array, 使用方法如下:

Cookie[] cookies = request.getCookies();
if(cookies != null) {
    for(Cookie cookie : cookies) {
        String name = cookie.getName();
        String value = cookie.getValue();
        ...
    }
}
Previous1.8 Maintain HTTP StateNext1.8.2 Session

Last updated 5 years ago

Was this helpful?