經過實際生活中的銀行卡來理解Cookie和Session間的關係:瀏覽器
結合到銀行存錢和取錢的過程來理解:服務器
存錢過程cookie
1. 興高采烈地到銀行櫃檯,把要存的錢交給銀行工做人員; 2. 銀行工做人員把錢存好後,給你一張銀行卡。
取錢過程session
1. 須要用錢了,找到最近的ATM機,插入銀行卡,輸入密碼; 2. ATM機驗證密碼正確後,就能夠取出錢啦!
類比存錢的過程,client(你)的請求到達server(銀行)後,server(銀行)新建了一個Session(銀行帳戶),並把Session(銀行帳戶)的ID(銀行卡號)放到Cookie(銀行卡)中返給了瀏覽器;網站
類比取錢的過程,client(你)再次發送請求時,瀏覽器會自動把Cookie(銀行卡)一塊兒發送給server(銀行或ATM機),server(銀行或ATM機)根據Cookie(銀行卡)中的ID(銀行卡號)找到Session(銀行帳戶),而後進行其它操做。code
1. 在瀏覽器中輸入天貓的網址,而後回車(什麼,不知道怎麼天貓的網址?我不會告訴你,我每次也是百度一下才知道的); 2. 天貓的服務器在接收到請求後,在返回給你網頁內容的同時,新建一個session,而後把session的ID放到cookie中返回; 3. 瀏覽器收到響應後,渲染網頁的頁面展現商品,同時發現有cookie,就保存一份cookie; 4. 選到本身喜歡的商品後,點擊加入購物車,瀏覽器就會將選擇的商品和cookie一塊兒發給天貓的服務器; 5. 天貓的服務器收到你加入購物車的請求後,拿到傳過來的cookie中的ID,到session中一查,原來你已經來過了,就直接在session中記錄你要購買的商品; 6. 選購完全部的商品後,你想看下本身買全沒有,就查看購物車;天貓服務器在接收到查看購物車請求後,根據cookie中的ID,在session中查詢到你加到購物車裏面的全部商品,返回給你。
由於HTTP請求是一種無狀態協議,就是說,Clinet和Server之間在完成一次請求後,二者之間就沒有關係了。當Client再次請求Server時,Server不會識別這個Client。通俗點說就是,Server把每一個HTTP請求都當作一次新的請求。若是Server想識別Client,就必須經過Cookie和Session配合來記錄數據,好比加入購物車。server