1. 程式人生 > >Cookie和Session的作用和工作原理

Cookie和Session的作用和工作原理

一、Cookie詳解

(1)簡介

因為HTTP協議是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式的實現。在典型的網上購物場景中,使用者瀏覽了幾個頁面,買了一盒餅乾和兩飲料。最後結帳時,由於HTTP的無狀態性,不通過額外的手段,伺服器並不知道使用者到底買了什麼。為了做到這點,就需要使用到Cookie了。伺服器可以設定或讀取Cookies中包含資訊,藉此維護使用者跟伺服器會話中的狀態。

Cookie(複數形態:Cookies),是指某些網站為了辨別使用者身份、進行session跟蹤儲存在使用者本地終端上的資料(通常經過加密)。

Cookie是由服務端生成的,傳送給客戶端(通常是瀏覽器)的。Cookie總是儲存在客戶端中,按在客戶端中的儲存位置,可分為記憶體Cookie和硬碟Cookie:

記憶體Cookie由瀏覽器維護,儲存在記憶體中,瀏覽器關閉後就消失了,其存在時間是短暫的。

硬碟Cookie儲存在硬盤裡,有一個過期時間,除非使用者手工清理或到了過期時間,硬碟Cookie不會被刪除,其存在時間是長期的。所以,按存在時間,可分為非持久Cookie和持久Cookie。

(2)工作原理

1、建立Cookie

當用戶第一次瀏覽某個使用Cookie的網站時,該網站的伺服器就進行如下工作:

①該使用者生成一個唯一的識別碼(Cookie id),建立一個Cookie物件

②預設情況下它是一個會話級別的cookie,儲存在瀏覽器的記憶體中,使用者退出瀏覽器之後被刪除。如果網站希望瀏覽器將該Cookie儲存在磁碟上,則需要設定最大時效(maxAge)

,並給出一個以秒為單位的時間(將最大時效設為0則是命令瀏覽器刪除該Cookie);

③將Cookie放入到HTTP響應報頭,將Cookie插入到一個 Set-Cookie HTTP請求報頭中。

④傳送該HTTP響應報文。

2、設定儲存Cookie

瀏覽器收到該響應報文之後,根據報文頭裡的Set-Cookied特殊的指示,生成相應的Cookie,儲存在客戶端。該Cookie裡面記錄著使用者當前的資訊。

3、傳送Cookie

當用戶再次訪問該網站時,瀏覽器首先檢查所有儲存的Cookies,如果某個存在該網站的Cookie(即該Cookie所宣告的作用範圍大於等於將要請求的資源),則把該cookie附在請求資源的HTTP請求頭上傳送給伺服器。

4、讀取Cookie

 伺服器接收到使用者的HTTP請求報文之後,從報文頭獲取到該使用者的Cookie,從裡面找到所需要的東西。

(3)作用

Cookie的根本作用就是在客戶端儲存使用者訪問網站的一些資訊。典型的應用有:

1、記住密碼,下次自動登入。

2、購物車功能。

3、記錄使用者瀏覽資料,進行商品(廣告)推薦。

(4)缺陷

①Cookie會被附加在每個HTTP請求中,所以無形中增加了流量。

②由於在HTTP請求中的Cookie是明文傳遞的,所以安全性成問題。(除非用HTTPS)

③Cookie的大小限制在4KB左右。對於複雜的儲存需求來說是不夠用的。

二、Session詳解

(1)簡介

Session代表伺服器與瀏覽器的一次會話過程,這個過程是連續的,也可以時斷時續的。Session是一種伺服器端的機制,Session 物件用來儲存特定使用者會話所需的資訊。

Session由服務端生成,儲存在伺服器的記憶體、快取、硬碟或資料庫中。

(2)工作原理

1、建立Session

當用戶訪問到一個伺服器,如果伺服器啟用Session,伺服器就要為該使用者建立一個SESSION,在建立這個SESSION的時候,伺服器首先檢查這個使用者發來的請求裡是否包含了一個SESSION ID,如果包含了一個SESSION ID則說明之前該使用者已經登陸過併為此使用者建立過SESSION,那伺服器就按照這個SESSION ID把這個SESSION在伺服器的記憶體中查找出來(如果查詢不到,就有可能為他新建立一個),如果客戶端請求裡不包含有SESSION ID,則為該客戶端建立一個SESSION並生成一個與此SESSION相關的SESSION ID。這個SESSION ID是唯一的、不重複的、不容易找到規律的字串,這個SESSION ID將被在本次響應中返回到客戶端儲存,而儲存這個SESSION ID的正是COOKIE,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識傳送給伺服器。 

2、使用Session

我們知道在IE中,我們可以在工具的Internet選項中把Cookie禁止,那麼會不會出現把客戶端的Cookie禁止了,那麼SESSIONID就無法再用了呢?找了一些資料說明,可以有其他機制在COOKIE被禁止時仍然能夠把Session id傳遞迴伺服器。

經常被使用的一種技術叫做URL重寫,就是把Session id直接附加在URL路徑的後面一種是作為URL路徑的附加資訊,表現形式為: 

http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764; 

另一種是作為查詢字串附加在URL後面,表現形式為: 

http://…../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 

還有一種就是表單隱藏欄位。就是伺服器會自動修改表單,新增一個隱藏欄位,以便在表單提交時能夠把Session id傳遞迴伺服器。

(3)作用

Session的根本作用就是在服務端儲存使用者和伺服器會話的一些資訊。典型的應用有:

1、判斷使用者是否登入。

2、購物車功能。

三、Cookie和Session的區別

1、存放位置不同

Cookie儲存在客戶端,Session儲存在服務端。

2 、存取方式的不同

 Cookie中只能保管ASCII字串,假如需求存取Unicode字元或者二進位制資料,需求先進行編碼。Cookie中也不能直接存取Java物件。若要儲存略微複雜的資訊,運用Cookie是比擬艱難的。 

而Session中能夠存取任何型別的資料,包括而不限於String、Integer、List、Map等。Session中也能夠直接保管Java Bean乃至任何Java類,物件等,運用起來十分便當。能夠把Session看做是一個Java容器類。 

3、安全性(隱私策略)的不同 

Cookie儲存在瀏覽器中,對客戶端是可見的,客戶端的一些程式可能會窺探、複製以至修正Cookie中的內容。而Session儲存在伺服器上,對客戶端是透明的,不存在敏感資訊洩露的風險。 假如選用Cookie,比較好的方法是,敏感的資訊如賬號密碼等儘量不要寫到Cookie中。最好是像Google、Baidu那樣將Cookie資訊加密,提交到伺服器後再進行解密,保證Cookie中的資訊只要本人能讀得懂。而假如選擇Session就省事多了,反正是放在伺服器上,Session裡任何隱私都能夠有效的保護。 

4、有效期上的不同 

只需要設定Cookie的過期時間屬性為一個很大很大的數字,Cookie就可以在瀏覽器儲存很長時間。 由於Session依賴於名為JSESSIONID的Cookie,而Cookie JSESSIONID的過期時間默許為–1,只需關閉了瀏覽器(一次會話結束),該Session就會失效。

5、對伺服器造成的壓力不同 

Session是保管在伺服器端的,每個使用者都會產生一個Session。假如併發訪問的使用者十分多,會產生十分多的Session,耗費大量的記憶體。而Cookie保管在客戶端,不佔用伺服器資源。假如併發閱讀的使用者十分多,Cookie是很好的選擇。

6、 跨域支援上的不同 

Cookie支援跨域名訪問,例如將domain屬性設定為“.baidu.com”,則以“.baidu.com”為字尾的一切域名均能夠訪問該Cookie。跨域名Cookie如今被普遍用在網路中。而Session則不會支援跨域名訪問。Session僅在他所在的域名內有效。 

參考文獻:

2、描述Cookie和Session的作用,區別和各自的應用範圍,cookie、Session工作原理。

相關推薦

什麼是OBD及組成作用工作原理

《名詞解釋》什麼是OBD及作用、工作原理 電子技術應用於發動機管理系統,除燃料噴射和點火功能等基本功能外,還有車載診斷(OBD)功能,當系統出現故障時,故障(MIL)燈或檢查發動機警告(Check Engine)燈點亮,同時動力總成控制模組(PCM)將故障資訊存入儲存器,通過一定的程式可以將故障碼從PCM中讀

基本ACL高級ACL工作原理

ACLACL:訪問控制列表,應用在路由器接口的指令列表(規則) 即告訴路由器那些允許哪些數據出入,拒絕哪些數據出入。 ACL工作原理: ACL使用網絡流量控制(過濾)技術,在路由器上讀取網絡層和傳輸層的報頭信息。 (源IP 目標IP 源端口

java棧stack堆heap的工作原理,用途及區別?舉例說明

沒有 inner tro htm jpg ati 節省空間 who border java堆和棧的區別【新手可忽略不影響繼續學習】 (視頻下載) (全部書籍) Java中內存分成兩種:一種是棧stack,一種是堆heap。函數中的一些基本類型的變量(int, float)

使用plumbing命令來深入理解git addgit commit的工作原理

clean 結果 write 文件的 repos 倉庫 head 根據 acc 前言: plumbing命令 和 porcelain命令 git中的命令分為plumbing命令和porcelain命令: porcelain命令就是我們常用的git add,git comm

Android訊息機制(Handler、MessageQueueLooper三者的工作原理

Android的訊息機制主要是指Handler的執行機制以及Handler所附帶的MessageQueue和Looper的工作過程。messagequeue意思是訊息佇列,它內部儲存一組訊息,有插入和刪除的功能,其實內部是以單鏈表的形式來實現佇列功能的。looper的意思是迴圈,它的主要功能是迴

Sftpftp 區別、工作原理等(彙總ing)

FTP協議安全分析 前 言 FTP(File Transfer Protocol,檔案傳輸協議)是網際網路上常用的協議之一,人們用FTP實現互連網上的檔案傳輸。由於TCP/IP協議族在設計時是處在一個相互信任的 平臺上的,使得在網路安全越來越被重視的今天,TCP/IP協議族的安全性也成為了安全界研究的

二層交換機、三層交換機路由器的基本工作原理三者之間的主要區別

一、三層交換機與路由器的主要區別之所以有人搞不清三層交換機和路由器之間的區別,最根本就是三層交換機也具有“路由”功能,與傳統路由器的路由功能總體上是一致的。雖然如此,三層交換機與路由器還是存在著相當大的本質區別的,下面分別予以介紹。1. 主要功能不同 雖然三層交換機與路由器都具有路由功能,但我們不能因此而把

session rsyns 的工作原理

session rsyns 的工作原理session的工作原理 1.session實現與工作原理瀏覽器和服務器采用http無狀態的通訊,為了保持客戶端的狀態,使用session來達到這個目的。然而服務端是怎麽樣標示不同的客戶端或用戶呢?這裏我們可以使用生活中的一個例子,假如你參加一個晚會,認識了很多人,你會采

Gearman(分散式任務分發框架)作用工作原理、安裝、PHP拓展

前言: 工作中我們有時候會遇到比如需要同時釋出資料到多個個伺服器上,或者同時處理多個任務。可以使用PHP的curl_multi的方式併發處理請求,但是由於網路和資料以及各個伺服器等等的一些情況導致這種併發處理的響應時間很慢,因為在併發請求的過程中還包括記錄日誌,處

交換機路由器作用以及工作原理詳解

1.1 PC機之間訪問過程 A訪問B過程 通過資料(mac地址)進行訪問 1)A傳送request請求包,該包攜帶源macA和目標macB 2)request請求包經過中繼器進行(廣播),所有的都可以收到該包 3)B收到A的請求包後,B給A回覆一個包(因為通訊是雙向的)

C/C++ 的巨集中###的作用展開

C/C++ 的巨集中:   (1) # 的功能是將其後面的巨集引數進行字串化操作,簡單說就是在對它所引用的巨集變數通過替換後在其左右各加上一個雙引號。   也就是說:   #define __TO_STRING_IMPL(x) #x   中的#X, 則巨集變數X所引用的是巨集引數中的X,因為,#X會

cookiesession區別聯絡與原理

session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來儲存資訊。           當程式需要為某個客戶端的請求建立一個session時,伺服器首先檢查這個客戶端的請求裡是否已包含了一個session標識 (稱為session id),如果已包含則說明以前

session實現與工作原理

瀏覽器和伺服器採用http無狀態的通訊,為了保持客戶端的狀態,使用session來達到這個目的。然而服務端是怎麼樣標示不同的客戶端或使用者呢? 這裡我們可以使用生活中的一個例子,假如你參加一個晚會,認識了很多人,你會採取什麼方式來區分不同的人呢!你可能根據臉型,也有可能根據

System v Posix作用區別(程序間通訊IPC)

當我們在linux系統中進行程序間通訊時,會有比如共享記憶體(shm),訊號量(sem),訊息佇列(msg)等方式時,會發現有System v以及POXIS兩種不同的型別。 我們探究一下System v和Posix到底代表著什麼意義又有什麼區別。 Posix: Posix(Portable Oper

詳細解析CookieSession作用工作原理,適合新手學習

一、Cookie詳解 (1)簡介 因為HTTP協議是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式的實現。在典型的網上購物場景中,使用者瀏覽了幾個頁面,買了一盒餅乾和兩飲料。最後結帳時,由於HTTP的無狀態性,不通過額外的手段,伺服器並不知道使用者到底買了什麼

描述CookieSession作用,區別各自的應用範圍,Session工作原理

Session用於儲存每個使用者的專用資訊. 每個客戶端使用者訪問時,伺服器都為每個使用者分配一個唯一的會話ID(Session ID) . 她的生存期是使用者持續請求時間再加上一段時間(一般是20分鐘左右).Session中的資訊儲存在Web伺服器內容中,儲存

CookieSession作用工作原理

一、Cookie詳解 (1)簡介 因為HTTP協議是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式的實現。在典型的網上購物場景中,使用者瀏覽了幾個頁面,買了一盒餅乾

CookieSession工作原理及比較

一、Cookie詳解 (1)簡介   因為HTTP協議是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式的實現。在典型的網上購物場景中,使用者瀏覽了幾個頁面,買了一盒餅乾和兩飲料。最後結帳時,由於HTTP的無狀態性,不通過額外的手段,伺服器並不知道使用者到底

HTTP SessionCookie工作原理

session的工作原理 術語session在我的經驗裡,session這個詞被濫用的程度大概僅次於transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。 session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/訊息,比如打電話時從拿起電話撥號

SpringMvc 及極速快-三平臺開發工作原理作用

上下 struts ont 通用 tex 環境 返回 子郵件 iba 極速快-三平臺開發Q1446595067工作原理: 1.springmvc請所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責負責對請求進行真正的處理工作。