5分鐘搞懂 session與cookie

2022-09-05 02:21:09 字數 1429 閱讀 3659

無狀態協議的意思是服務端與客戶端不會記錄任何一次通訊的資訊。諾蘭有一部電影《記憶碎片》,說的是乙個有「短期記憶喪失症」的人根據自己支離破碎的記憶來找到殺害自己妻子的**的故事。因為記不住發生的事,電影中那個老兄只能靠寫字條幫忙記錄事情。

無狀態協議的通訊雙方就是「失憶症患者」,而且是永久性的。「服務端君」和「客戶端君」雖然見過很多面,但每次見面仍還是認不出對方,都是陌生人。但是,有時候認出使用者是必須的,如在使用者使用者登入時,必須能記住使用者的登入狀態。

session與cookie就是為解決http無狀態導致的問題引入的。

session是服務端的使用者資訊儲存。「服務端君」作為永久性的失憶症患者,記不住任何事情,就像電影中那位老兄一樣,只能靠外部手段 - 寫字條來記錄見過的所有「客戶端君」,在那個字條上,它或許會寫上

序號:#98

姓名:老王

...

,然後放進口袋,等下次見面時,可以查一下字條,看看有沒有見過面,是不是陌生人。這個字條就是session,是服務端的使用者資訊儲存。但這裡有乙個問題,下次見面時,「服務端君」根據什麼去查字條呢?怎麼把眼前的人和口袋裡的字條聯絡起來?這就涉及到cookie。

cookie是服務端儲存在客戶端的使用者資訊。「服務端君」想下次見面時能認出眼前的「客戶端君」,由於「客戶端君」也是失憶症患者,記不住事,「服務端君」寫了張條子交給「客戶端君」,讓它下次見面時帶來,「客戶端君」把條子放進了口袋。條子的內容:

序號:#98
這樣下次見面時,「服務端君」根據客戶端君帶來的條子裡的序號,翻翻自己的口袋,找出對應的字條,就能識別出眼前的這位「客戶端君」了。「服務端君」給「客戶端君」的條子就是cookie,條子的內容就是session id。

「服務端君」可以寫任何條子給「客戶端君」,不僅僅是序號,也就是說服務端可以把其他資訊也寫入客戶端的cookie中。例如這位「服務端君」是賣東西的,它可以把這次見面「客戶端君」看了什麼東西寫進條子交給「客戶端君」,下次見面時,「客戶端君」帶來的條子裡寫了上次看過的東西,這樣就可以向它推薦它感興趣的東西了。

我們以打比方的方式介紹了session與cookie。

session是服務端的使用者資訊儲存,中文經常翻譯為會話,是一種伺服器端的機制,一種用於在客戶端與伺服器端之間保持狀態的解決方案。

cookie是服務端儲存在客戶端的使用者資訊,可以理解為服務端給客戶端貼的紙條,紙條可以是任何內容。cookie在瀏覽器端以檔案的方式儲存資訊,下次訪問同個伺服器時(同樣網域名稱)時,會自動發回cookie資訊。cookie一般的使用場景:

訪問時cookie每次都會自動上傳,被認為有點浪費。現在有更好的客戶端儲存可以使用:localstoragesessionstorage,可以參考相關資料。

5分鐘搞懂模版方法模式

模版是什麼大家都清楚,比如簡歷模版,簡歷模版包括教育經歷 工作經歷 專業技能等等欄目。雖然簡歷模版相同,但是每個人的簡歷卻不同,這是因為我們每個人的教育經歷 工作經歷 專業技能等都不同。同理,在設計模式中,模板方法模式的主要用途在於將不變的行為從子類搬到超類,去除了子類中的重複 下面是模板方法模式的...

5分鐘搞懂什麼是深度學習

現在各種名詞非常火,什麼人工智慧 機器學習 深度學習,那麼我要學習它,當然是要在乙個大的方向 輪廓上看到它。比如爬一座山,先遠遠的看看,對它有乙個大致的了解。如何理解人工智慧 機器學習和深度學習三者的關係 嗯嗯,這麼一看是不是清楚了很多呢?再來一張 人工智慧 機器學習和深度學習三者的關係 深度學習 ...

5分鐘搞懂什麼是深度學習

現在各種名詞非常火,什麼人工智慧 機器學習 深度學習,那麼我要學習它,當然是要在乙個大的方向 輪廓上看到它。比如爬一座山,先遠遠的看看,對它有乙個大致的了解。如何理解人工智慧 機器學習和深度學習三者的關係 嗯嗯,這麼一看是不是清楚了很多呢?再來一張 人工智慧 機器學習和深度學習三者的關係 深度學習 ...