Cookie和Session的區別【面試常客】

前言

Cookie和Session的出現與Http協議的特點有着非常密切的關係,因爲Http協議是一個無狀態的協議,不能夠記錄每一次請求和響應數據。例如:在沒有Cookie和Session的前提下,你在某寶或某東要下單一本書,由於Http協議是一個無狀態的協議,所以它並不能追蹤到是誰下單了書,也不能知道它下單了幾本書,Cookie和Session的機制就是來標識具體的用戶,記錄在服務端執行某些操作的狀態。

區別

  1. 存儲位置的不同

Cookie數據存儲在本地瀏覽器上,Session數據存儲到服務器上

  1. 存儲容量的不同

單個Cookie數據的大小應當 < 4kb,一個站點最多保存20個cookie信息
Session的大小是沒有限制的,但爲了服務器的性能問題,Session數據也不應該過多,並且session支持刪除。

  1. 存儲方式

Cookie的存儲方式是以ASCII碼錶示的字符串
Session的存儲方式可以是Java的諸多集合類,例如List,Map…

  1. 隱私策略

Cookie文件存儲的位置在瀏覽器中,所以對客戶端是可見的,但是要防止不懷好意者截圖cookie實施cookie欺騙[https://www.cnblogs.com/MR-YY/p/5259178.html]。
Session存儲在服務器上,客戶端時看不到的,所以相對cookie安全很多。

  1. 有效期不同

Cookie存在於瀏覽器的中,可以長期存在於電腦的硬盤裏。
Session的內部執行是依賴於值爲JSESESSION的cookie,set-cookie = JSESESSION默認值等於-1,也就是說,當瀏覽器關閉之後,session就消失了,所以session不能達到長期有效的結果。

  1. 服務器壓力不同

cookie數據保存的瀏覽器,不佔用服務器公共資源,對那些併發量很高的網站,是很友好的。
cookie數據保存在服務器,佔用了公用資源,對用戶併發量較高的網站,每一個用戶都會產生一個session對象,如果用戶多的話,就會產生很多,很消耗服務器性能。

  1. 瀏覽器支持不同

瀏覽器支持cookie:

那麼客戶端的cookie既可以設置爲本窗口和子窗口有效,還可以設置爲所有窗口有效。
服務端的session只能在本窗口和子窗口中有效。

瀏覽器不支持cookie:

假如瀏覽器禁用了cookie或本身不支持cookie,則會話跟蹤就回失效,服務端發送過來的cookie信息也就接收不到。
但是session其實還是能用,不是說是session的存在是依賴於cookie的嗎,cookie都不能用了session還能用嗎?
其實是可以的,當服務器創建session對象後,響應給瀏覽器數據,會給瀏覽器的響應頭的set-cookie=JSESESSION=xxxxx,但是這個時候瀏覽器已經禁用cookie了,所以瀏覽器並不能收到它,由於要和服務器通信,要給請求頭設置cookie= JSESSION,但是此時瀏覽器並沒有,所以要想實現通信,可以先獲取到服務器的JSESSION,再通過瀏覽器的URL傳參的方式傳遞JSESSION,達到客戶端服務器通信。

  1. 跨域名支持不同

cookie可以跨域訪問(setDomain(…))
session不支持跨越訪問

參考:https://www.jianshu.com/p/2f7031a69f43

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