摘要:目前大多數的應用都是用實現跟蹤的。的安全性一般,他人可通過分析存放在本地的并進行欺騙。在安全性第一的前提下,選擇更優。考慮到減輕服務器性能方面,應當適時使用。因此,維持一個會話的核心就是客戶端的唯一標識,即。
在技術面試中,經常被問到“說說Cookie和Session的區別”,大家都知道,Session是存儲在服務器端的,Cookie是存儲在客戶端的,然而如果讓你更詳細地說明,你能說出幾點?今天個推君就和大家談談“Cookie和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. 再次訪問某一網站時,能令網站識別訪問人的計算機軟件。
Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息。如何識別特定的客戶呢?cookie就可以做到。每次HTTP請求時,客戶端都會發送相應的Cookie信息到服務端。它的過期時間可以任意設置,如果你不主動清除它,在很長一段時間里面都可以保留著,即便這之間你把電腦關機了。
既然它是存儲在客戶端的,換句話說通過某些手法我就可以篡改本地存儲的信息來欺騙服務端的某些策略,那該怎么辦呢?我們先按下不表,來看看另外一位朋友 —— Session。
Session是什么?
同樣,我們先來看看釋義: Session: 普通釋義:n. 會議;(法庭的)開庭;(議會等的)開會;學期;講習會 計算機釋義:會話
Session是在無狀態的HTTP協議下,服務端記錄用戶狀態時用于標識具體用戶的機制。它是在服務端保存的用來跟蹤用戶的狀態的數據結構,可以保存在文件、數據庫或者集群中。在瀏覽器關閉后這次的Session就消失了,下次打開就不再擁有這個Session。其實并不是Session消失了,而是Session ID變了,服務器端可能還是存著你上次的Session ID及其Session 信息,只是他們是無主狀態,也許一段時間后會被刪除。
實際上Cookie與Session都是會話的一種方式。它們的典型使用場景比如“購物車”,當你點擊下單按鈕時,服務端并不清楚具體用戶的具體操作,為了標識并跟蹤該用戶,了解購物車中有幾樣物品,服務端通過為該用戶創建Cookie/Session來獲取這些信息。
如果你的站點是多節點部署,使用Nginx做負載均衡,那么有可能會出現Session丟失的情況(比如,忽然就處于未登錄狀態)。這時可以使用IP負載均衡(IP綁定 ip_hash,每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決Session的問題),或者將Session信息存儲在集群中。在大型的網站中,一般會有專門的Session服務器集群,用來保存用戶會話,這時可以使用緩存服務比如Memcached或者Redis之類的來存放Session。
目前大多數的應用都是用 Cookie 實現Session跟蹤的。第一次創建Session時,服務端會通過在HTTP協議中反饋到客戶端,需要在 Cookie 中記錄一個Session ID,以便今后每次請求時都可分辨你是誰。有人問,如果客戶端的瀏覽器禁用了 Cookie 怎么辦?建議使用URL重寫技術進行會話跟蹤,即每次HTTP交互,URL后面都被附加上諸如 sid=xxxxx 的參數,以便服務端依此識別用戶。
換個姿勢~
客戶端和服務端之間的通信交流,可以這樣簡單理解: 比如當你在個推技術分享沙龍上覺得某位講師講得很好,在會后問了他幾個問題,他對你這些問題進行了回答,這就是一個會話。但這個講師太受歡迎,于是工作人員收集問題,并給每個提問者一個號碼牌,講師按照號碼牌依次給出相應解答并告訴相應的人。這就是Session。一段時間后,當你再次遇見這位講師,他發現你身上有上次回復你的答案,知曉你是那個好學的程序猿。于是你欣喜若狂,哇塞,講師居然認出我了,這就是Cookie,你的小甜點??蛻舳撕帽嚷犝n的技術愛好者,服務端就是這位講師。
Cookie還可以在一些方便用戶的場景下使用。比如你某次登陸過一個網站,下次登錄的時候不想再次輸入賬號了,怎么辦?這個信息可以被寫到Cookie里面,當訪問網站時,網站頁面的腳本可以讀取這個信息,自動填寫用戶名,方便用戶使用,給用戶一點甜頭。
總結語:
1、Cookie 在客戶端(瀏覽器),Session 在服務器端。 2、Cookie的安全性一般,他人可通過分析存放在本地的Cookie并進行Cookie欺騙。在安全性第一的前提下,選擇Session更優。重要交互信息比如權限等就要放在Session中,一般的信息記錄放Cookie就好了。 3、單個Cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個Cookie。 4、Session 可以放在 文件、數據庫或內存中,比如在使用Node時將Session保存在redis中。由于一定時間內它是保存在服務器上的,當訪問增多時,會較大地占用服務器的性能??紤]到減輕服務器性能方面,應當適時使用Cookie。 5、Session 的運行依賴Session ID,而 Session ID 是存在 Cookie 中的,也就是說,如果瀏覽器禁用了 Cookie,Session 也會失效(但是可以通過其它方式實現,比如在 url 中傳遞 Session ID)。 6、用戶驗證這種場合一般會用 Session。因此,維持一個會話的核心就是客戶端的唯一標識,即Session ID。
題外話,那么話說Session Cookie能被篡改么? 理論上可以,只要改變了連接時的Session ID 就可以了~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11359.html
摘要:例如要想在多個二級域名中共享,需要設置為頂級域名,這樣就可以在所有二級域名里面或者到這個的值了。頂級域名只能獲取到設置為頂級域名的,設置為其他子級域名的無法獲取。 Cookie和Session詳解 Cookie Cookie只存儲在客服端 Cookie是什么:Cookies是web服務器存放在用戶硬盤的一段文本,Cookies允許一個wen站點在用戶的機器存放一些文本的信息,并可以在以...
摘要:由于是存在客戶端上的,所以瀏覽器加入了一些限制確保不會被惡意使用,同時不會占據太多磁盤空間。簽名是對前兩部分的簽名,防止數據被篡改。的作用最開始的初衷是為了實現授權和身份認證作用的,可以實現無狀態,分布式的應用授權。 前言 無狀態的HTTP協議 很久很久之前, Web基本都是文檔的瀏覽而已。既然是瀏覽, 作為服務器, 不需要記錄在某一段時間里都瀏覽了什么文檔, 每次請求都是一個新的HT...
摘要:所謂的無連接就是服務器收到了客戶端的請求之后,響應完成并收到客戶端的應答之后,即斷開連接。從而節省傳輸時間。協議對事務的處理沒有記憶能力。這種方式某種方面上講解放了服務器,但是卻不利于客戶端與服務器的連接。 session與cookie是什么? session與cookie屬于一種會話控制技術.常用在身份識別,登錄驗證,數據傳輸等.舉個例子,就像我們去超市買東西結賬的時候,我們要拿出我...
摘要:什么是用來存儲客戶端的一小段文本是一門客戶端的技術因為是存儲在客戶端瀏覽器中的是為了實現客戶端與服務器端之間的狀態的保持技術,不安全,不要使用存儲敏感信息比如登錄狀態和登錄信息一些敏感的數據應該存儲在服務器端的值從哪里來的當你訪問一個網站這 什么是cookie, 用來存儲客戶端的一小段文本是一門客戶端的技術 因為cookie是存儲在客戶端瀏覽器中的是為了實現 客戶端與服務器端之間的狀態...
閱讀 1173·2021-09-27 13:34
閱讀 981·2021-09-13 10:25
閱讀 510·2019-08-30 15:52
閱讀 3449·2019-08-30 13:48
閱讀 647·2019-08-30 11:07
閱讀 2167·2019-08-29 16:23
閱讀 1992·2019-08-29 13:51
閱讀 2327·2019-08-26 17:42