-
1 # 斬相思86831339
-
2 # YungFan
Cookie和Session的異同
1、Cookie與Session都是用來儲存使用者狀態資訊的一種方法或者手段;
2、Cookie是儲存在客戶端的臨時資料夾, Session是儲存在伺服器的記憶體中的,伺服器使用一種類似於散列表的結構來儲存資訊,一個Session域物件為一個客戶瀏覽器服務;
3、Cookie安全性較差,Session安全性較高;
4、Cookie的儲存時間可以很久(以txt格式儲存在客戶端硬碟),Session儲存的時間很短,一般是30分鐘;
5、Cookie為多個客戶瀏覽器共享,Session為一個客戶瀏覽器獨享;
6、Session是透過Cookie的機制來實現的。
兩個經典問題與URL重寫1、客戶端禁用Cookie,問Session還能工作嗎?
(1) 不能(事實)絕大多數的網站是這樣,原因是沒有使用URL重寫機制來解決Cookie被禁用的問題。(URL重寫程式碼量大而且只能應用在動態的頁面靜態的不行)
(2) 能(事實)微乎其微的網站可以(比如:卓越),原因是它使用了URL重寫機制。
2、 Cookie可以用來實現購物車功能嗎?
能 Session能做的Cookie也能做。
本質無論Cookie,還是URL重寫,目的都是向伺服器傳遞
JSESSIONID=32位字串的key和value名值對。
理解Cookie-Session機制當程式需要為某個客戶端的請求建立一個Session的時候,伺服器首先檢查這個客戶端的請求裡是否已包含了一個Session標識——稱為 Session id,如果已包含一個Session id則說明以前已經為此客戶端建立過Session,伺服器就按照Session id把這個 Session檢索出來使用。如果客戶端請求不包含Session id,則為此客戶端建立一個Session並且生成一個與此Session相關聯的Session id,這個 Session id將在本次響應中返回給客戶端儲存。客戶端儲存這個Session id的方式可以採用Cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識發回給伺服器。一般這個Cookie的名字都是類似於JSESSIONID。對Session來說,除非應用程式通知伺服器刪除一個Session,否則伺服器會一直保留它。瀏覽器從來不會主動在關閉之前通知伺服器它將要關閉,因此伺服器不會知道瀏覽器已經關閉。之所以會有這種錯覺,是大部分Session機制都使用會話Cookie來儲存Session id,而關閉瀏覽器後這個 Session id就消失了,再次連線伺服器時也就無法找到原來的Session。如果伺服器設定的Cookie被儲存到硬碟上,或者使用某種手段改寫瀏覽器發出的HTTP請求頭,把原來的Session id傳送給伺服器,則再次開啟瀏覽器仍然能夠找到原來的Session。也就實說關閉瀏覽器不會導致伺服器端Session被刪除,但是大量的Session一直在也伺服器記憶體,伺服器也受不了,所以伺服器為Session設定了一個失效時間,當距離客戶端上一次使用Session的時間超過這個失效時間(一般為30分鐘)時,伺服器就可以認為客戶端已經停止了活動,才會把Session刪除以節省伺服器端的儲存空間。
-
3 # ITMoo
1,session 在伺服器端,cookie 在客戶端(瀏覽器) 2,session 預設被存在在伺服器的一個檔案裡(不是記憶體) 3,session 的執行依賴 session id,而 session id 是存在 cookie 中的,也就是說,如果瀏覽器禁用了 cookie ,同時 session 也會失效(但是可以透過其它方式實現,比如在 url 中傳遞 session_id)4,session 可以放在 檔案、資料庫、或記憶體中都可以。 5,使用者驗證這種場合一般會用 session1. 由於HTTP協議是無狀態的協議,所以服務端需要記錄使用者的狀態時,就需要用某種機制來識具體的使用者,這個機制就是Session.典型的場景比如購物車,當你點選下單按鈕時,由於HTTP協議無狀態,所以並不知道是哪個使用者操作的,所以服務端要為特定的使用者建立了特定的Session,用用於標識這個使用者,並且跟蹤使用者,這樣才知道購物車裡面有幾本書。這個Session是儲存在服務端的,有一個唯一標識。在服務端儲存Session的方法很多,記憶體、資料庫、檔案都有。叢集的時候也要考慮Session的轉移,在大型的網站,一般會有專門的Session伺服器叢集,用來儲存使用者會話,這個時候 Session 資訊都是放在記憶體的,使用一些快取服務比如Memcached之類的來放 Session。2. 思考一下服務端如何識別特定的客戶?這個時候Cookie就登場了。每次HTTP請求的時候,客戶端都會發送相應的Cookie資訊到服務端。實際上大多數的應用都是用 Cookie 來實現Session跟蹤的,第一次建立Session的時候,服務端會在HTTP協議中告訴客戶端,需要在 Cookie 裡面記錄一個Session ID,以後每次請求把這個會話ID傳送到伺服器,我就知道你是誰了。有人問,如果客戶端的瀏覽器禁用了 Cookie 怎麼辦?一般這種情況下,會使用一種叫做URL重寫的技術來進行會話跟蹤,即每次HTTP互動,URL後面都會被附加上一個諸如 sid=xxxxx 這樣的引數,服務端據此來識別使用者。 3. Cookie其實還可以用在一些方便使用者的場景下,設想你某次登陸過一個網站,下次登入的時候不想再次輸入賬號了,怎麼辦?這個資訊可以寫到Cookie裡面,訪問網站的時候,網站頁面的指令碼可以讀取這個資訊,就自動幫你把使用者名稱給填了,能夠方便一下使用者。這也是Cookie名稱的由來,給使用者的一點甜頭。所以,總結一下: Session是在服務端儲存的一個數據結構,用來跟蹤使用者的狀態,這個資料可以儲存在叢集、資料庫、檔案中;Cookie是客戶端儲存使用者資訊的一種機制,用來記錄使用者的一些資訊,也是實現Session的一種方式。
-
4 # 墨跡天氣
我們要了解Session和Cookie的含義,先看一下HTTP協議的特點:
HTTP協議的主要特點可概括如下:
1.支援客戶/伺服器模式。
2.簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。
3.靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。
4.無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。
關鍵是第5點:無狀態。一旦資料交換完畢,客戶端與伺服器端的連線就會關閉,再次交換資料需要建立新的連線。這就意味著伺服器無法從連線上跟蹤會話。這對於web網站來說是致命的。
怎麼解決這樣的問題呢?就是會話跟蹤技術
Cookie與Session正是解決HTTP無狀態協議的會話技術。一個是在客戶端記錄,另一個是在伺服器端記錄,Cookie透過在客戶端記錄資訊確定使用者身份,Session透過在伺服器端記錄資訊確定使用者身份。
Cookie的主要內容包括名字,值,過期時間,路徑和域,路徑和域共同構成了cookie的作用範圍,相當於一個key-value的方式存在於客戶端。根據有無設定過期時間可分為 會話Cookie和持久Cookie,不設定過期時間,則是會話Cookie,這個Cookie的生命週期為瀏覽器會話期間,關閉瀏覽器視窗,cookie就消失,若設定了過期時間,瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie仍然有效直到超過設定的過期時間。儲存在硬碟上的cookie可以在瀏覽器的不同程序間共享。
Session是另一種記錄客戶狀態的機制,不同的是Cookie儲存在客戶端瀏覽器中,而Session儲存在伺服器上。客戶端瀏覽器訪問伺服器的時候,伺服器把客戶端資訊以某種形式記錄在伺服器上。這就是Session。客戶端瀏覽器再次訪問時只需要從該Session中查詢該客戶的狀態就可以了。每個使用者訪問伺服器都會建立一個session,那伺服器是怎麼標識使用者的唯一身份呢?事實上,使用者與伺服器建立連線的同時,伺服器會自動為其分配一個SessionId。以後每次客戶端請求的時候,把這個SeesionId帶過來即可。伺服器端根據這個SessionId作為key,得到對應的value。從而來保持會話。一般來說session是依賴cookie的。如果使用者在瀏覽器把cookie關閉,那麼這個會話就無法保持了。如果不依賴於cookie,那麼客戶端不把sessionId保持到cookie裡面,當用戶登入之後,不管使用者如何操作,都得帶著這個sessionId在頁面上傳,從而達到每次呼叫伺服器都傳這個sessionId.
-
5 # 夕陽雨晴
簡述cookie和session機制的區別和聯絡。
1. 具體來說,cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時,由於採用伺服器端保持狀態的方案在客戶端也需要儲存一個標誌,所以session機制可能需要藉助於cookie機制來達到儲存標誌的目的,但實際上它還有其他選擇。
2. 正統的cookie分發是透過擴充套件HTTP協議來實現的,伺服器透過在HTTP的響應頭中加上一行特殊的提示,以提示瀏覽器按照指示生成相應的cookie。然而純粹的客戶端指令碼,如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由瀏覽器按照一定的原則在後臺自動傳送給伺服器的。瀏覽器檢查所有儲存的cookie,如果某個cookie所宣告的作用範圍大於或等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上傳送給伺服器。
3. session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來儲存資訊。
4. 儲存這個session ID的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動按照規則把這個標誌發回給伺服器。一般這個cookie的名字都是類似於session ID。但cookie可以被人為地禁止,則必須有其他機制,以便在cookie被禁止時仍能夠把session ID傳遞迴伺服器。
-
6 # 齒輪易創
簡單來說一個是把使用者資料儲存在使用者端(電腦、手機等),一個是保留在伺服器端(雲端)。
Cookie是針對每一個網站的資訊,每一個網站只對應一個,其它網站不能訪問,這個檔案是儲存在客戶端的,每次你開啟相應網站,瀏覽器會查詢這個網站的cookies,如果有就會將這個檔案起傳送出去。
cookies檔案的內容大致包含這些資訊如使用者名稱,密碼,設定等。由伺服器傳送出來以儲存在瀏覽器上,從而下次這位訪客又回到該網路伺服器時,可從該瀏覽器讀回此資訊。
Session是針對每一個使用者的,session機制是一種伺服器端的機制。只有客戶機訪問,程式就會為這個客戶新增一個session。
session裡主要儲存的是使用者的登入資訊,操作資訊等。Session直接翻譯成中文比較困難,一般都譯成時域。在計算機專業術語中,Session是指一個終端使用者與互動系統進行通訊的時間間隔,通常指從註冊進入系統到登出退出系統之間所經過的時間。以及如果需要的話,可能還有一定的操作空間。
具體到Web中的Session指的就是使用者在瀏覽某個網站時,從進入網站到關閉瀏覽器所經過的這段時間,也就是使用者瀏覽這個網站所花費的時間。
因此從上述的定義中我們可以看到,Session實際上是一個特定的時間概念。
Cookie和Session的關係當客戶端請求建立一個session的時候,伺服器首先檢查客戶端請求裡是否已包含了一個session標識session id,如果已包含一個session id則說明以前已經為此客戶端建立過session,伺服器就按照session id把這個session檢索出來使用。
如果客戶端請求不包含session id,則為此伺服器建立一個session並且生成一個與此session相關聯的session id。儲存這個session id的方式可以採用cookie,Session類似於”雲端”儲存。一個Session的概念需要包括特定的客戶端,特定的伺服器端以及不中斷的操作時間。
優缺點cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙(cooke是透明可見的),考慮到安全應當使用sessionsession會在一定時間內儲存在伺服器上,當訪問增多,會比較佔用你伺服器的效能。考慮到減輕伺服器效能方面,應當使用COOKIE單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。總結具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案
cookie針對每一個網站,session針對每一個使用者。
回覆列表
http是一種無狀態的協議,所謂的無狀態是指同一個客戶端連續的請求,對於服務端來說,是區分不了,你是同一個客戶端的。cookie跟session就是為了解決http無狀態的問題而存在的.客戶端第一次請求伺服器,伺服器會在響應頭裡有Set-Cookie(大概是這樣)響應頭,cookie是一個鍵值對(tomcat裡session的名字是jsessionid,沒記錯的話,不同的伺服器這個不一樣),在以後的每次請求裡,客戶端的請求在請求頭裡都會有cookis這個請求頭,伺服器會根據cookie的值找到對應的session(類似於從HashMap<String, Session>這樣的結構裡拿到session,session怎麼儲存就不展開了). 整體流程就是這樣,其實就是每次請求都傳遞一個固定的值,根據這個值來確定是同一個使用者,一般一些app的接口裡不會用cookie而是用token,也就是這麼個原理。留兩個問題吧,有些頁面只能在微信端開啟,怎麼在PC端的瀏覽器開啟,第二個,有種Web攻擊叫跨站指令碼攻擊,裡面就用了cookie的原理,(有些專業術語可能寫錯了)去了解下上面說的兩個問題