Cookie和Session重新認識

1. 什麼是會話?
    會話簡單地理解爲:用戶打開一個瀏覽器,點擊多個超鏈接,訪問服務器多個web資源,
    然後關閉瀏覽器,整個過程稱爲一個會話; 我們可以類比打電話掛電話,這個過程爲
    一次通話;是一個道理;
2. 會話過程中要解決的一些問題?
    每個用戶與服務器進行交互的過程中,每個用戶都會產生自己的用戶數據,這個時候
    程序就要想辦法保存每個用戶的數據;javaWeb中保存用戶數據的技術有兩種:
    cookie 和 session;我們舉個例子說明:比如用戶登錄時會有用戶名和密碼信息,
    
    1. 我們可以創建一個cookie對象,然後將用戶名和密碼信息保存到cookie對象中,然後
    添加到response響應中,返回給瀏覽器,瀏覽器接收到cookie信息後,將cookie存儲
    到瀏覽器緩存或者磁盤上,這樣用戶信息就保存到了客戶端,這種技術實現就是cookie;
        我們看cookie的set方法 :
     setCookie(name, value, expires, path, domain, secure)可以知道cookie對象可
    以存儲 key-value 信息,設置cookie 過期時間,作用範圍,以及安全設置;
    
    2. 我們也可以在服務器端穿件一個session對象,session是一個域對象,本質上是一個
    map結構,所以我們可以將我們的用戶名和密碼做成一個User對象,然後作爲value存儲到
    這個map中,至於key,由服務器自動生成一個key作爲session的key ,並且服務器會同時
    創建一個cookie對象,這個cookie中的並給這個cookie的 “鍵” 設置爲 :JSessionID,
    cookie的 “值” 設置爲 session的key ,然後返回給瀏覽器,這樣真正的 User 信息其實是
    存儲到服務器端的session中,而瀏覽器端只是存儲了獲得Session中User信息的key,這樣
    實現了用戶信息在服務器端的存儲;這就是session技術;
    
3. 類比理髮店會員卡的例子;
    我們理髮店辦理會員卡200塊錢可以理髮10次,理髮店要統計你理髮次數有兩種方案:
    1. 第一種是理髮店會給你提供一張卡,每次你去理一次髮,在結賬時理髮店的工作人員會
    在你的卡上打一個孔,然後將卡交給你帶走,這樣這個卡上的孔的個數記錄了你的理髮次數
    信息;你剩餘的理髮次數就是:20-卡上孔的個數;像這樣你與理髮店之間的交互信息,由
    你來保存管理,每一次交互由你來提供這個信息;跟cookie技術是一致的;
    2. 第二種是理髮店會給你提供一張卡,這個卡上有一個卡號,然後理髮店會在後臺根據你這
    個卡號建立一個記錄,記錄了你理髮的次數,當然這個時候還可以記錄其他附加信息,比如你
    名字,你的性別等信息;而給你的會員卡上邊除了一個卡號,並沒有其他信息,每次你去理髮
    需要出示你的會員卡,然後工作人員會根據你的卡號查詢你已經理髮的次數與剩餘理髮次數,
    並且每次在你理髮結束,會在你的會員卡號對應的記錄裏邊將你的理髮次數加1,剩餘理髮次
    數減1;像這樣,你的理髮次數信息你不需要維護,你只需要持有你的卡號,就可以到理髮店
    里根據卡號調出你的所有信息,也就是說真正的業務數據保存到理髮店,而你只需要記錄一個
    卡號就可以了;就是Session的實現原理;
    
4. 通過以上分析,我們可以清楚知道,cookie和session都是爲了解決 用戶與服務器交互過程中
    用戶業務數據保存的問題,對於真正的業務數據保存位置不同:
        1、 業務數據保存在客戶端,就是cookie技術;
        2、 業務數據保存到服務器端,就是Session技術,但是這個時候需要瀏覽器端保存一個
            獲得服務器端Session中業務數據的ID,這個id的保存是利用了cookie技術;
    可以說,session的出現,減輕了cookie的負擔,以前它要保存業務數據(數據量可能會比較大),
    現在cookie只用保存一個 key-value 就可以了;
        無論是cookie還是session都實現了客戶業務數據的保存;
        
            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章