在技術(shù)面試中,經(jīng)常被問到“說說Cookie和Session的區(qū)別”,大家都知道,Session是存儲在服務(wù)器端的,Cookie是存儲在客戶端的,然而如果讓你更詳細(xì)地說明,你能說出幾點?今天就和大家談?wù)劇癈ookie和Session”的那些事兒。
Cookie是什么?
從它的詞語本身含義來看: Cookie: n. 餅干;小甜點 N-COUNT A cookie is a piece of computer software which enables a website you have visited to recognize you if you visit it again. 再次訪問某一網(wǎng)站時,能令網(wǎng)站識別訪問人的計算機軟件。
Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息。如何識別特定的客戶呢?cookie就可以做到。每次HTTP請求時,客戶端都會發(fā)送相應(yīng)的Cookie信息到服務(wù)端。它的過期時間可以任意設(shè)置,如果你不主動清除它,在很長一段時間里面都可以保留著,即便這之間你把電腦關(guān)機了。
既然它是存儲在客戶端的,換句話說通過某些手法我就可以篡改本地存儲的信息來欺騙服務(wù)端的某些策略,那該怎么辦呢?我們先按下不表,來看看另外一位朋友 —— Session。
Session是什么?
同樣,我們先來看看釋義: Session: 普通釋義:n. 會議;(法庭的)開庭;(議會等的)開會;學(xué)期;講習(xí)會 計算機釋義:會話
Session是在無狀態(tài)的HTTP協(xié)議下,服務(wù)端記錄用戶狀態(tài)時用于標(biāo)識具體用戶的機制。它是在服務(wù)端保存的用來跟蹤用戶的狀態(tài)的數(shù)據(jù)結(jié)構(gòu),可以保存在文件、數(shù)據(jù)庫或者集群中。在瀏覽器關(guān)閉后這次的Session就消失了,下次打開就不再擁有這個Session。其實并不是Session消失了,而是Session ID變了,服務(wù)器端可能還是存著你上次的Session ID及其Session 信息,只是他們是無主狀態(tài),也許一段時間后會被刪除。
目前大多數(shù)的應(yīng)用都是用 Cookie 實現(xiàn)Session跟蹤的。第一次創(chuàng)建Session時,服務(wù)端會通過在HTTP協(xié)議中反饋到客戶端,需要在 Cookie 中記錄一個Session ID,以便今后每次請求時都可分辨你是誰。有人問,如果客戶端的瀏覽器禁用了 Cookie 怎么辦?建議使用URL重寫技術(shù)進行會話跟蹤,即每次HTTP交互,URL后面都被附加上諸如 sid=xxxxx 的參數(shù),以便服務(wù)端依此識別用戶。