首頁  >  文章  >  後端開發  >  關於函數cookie、session、storage總結

關於函數cookie、session、storage總結

一个新手
一个新手原創
2017-09-18 10:21:391336瀏覽


一、cookie

1、cookie:記錄客戶端和伺服器端互動的資訊。
cookie規範定義了伺服器和客戶端互動資訊的格式、生存期、使用範圍、安全性。
在JavaScript中可以透過 document.cookie 來讀取或設定這些資訊。由於 cookie 多用在客戶端和服務端之間進行通信,除了JavaScript以外,服務端的語言(如PHP)也可以存取 cookie。

2、Cookie在遠端瀏覽器端儲存資料並以此追蹤和識別使用者的機制。 從實作上說,Cookie是儲存在客戶端上的一小段數據,瀏覽器(即客戶端)透過HTTP協定和伺服器端進行Cookie互動。 cookie 是有大小限制的,每個 cookie 存放的資料不能超過4kb,如果 cookie 字串的長度超過4kb,則該屬性將傳回空字串。

3、Cookie是由瀏覽器實作和管理的。

4、Cookie本身屬性有”Comment” 、”Domain”、”Max-Age”、”Path”、“Secure”、”Version”,具體使用方式參考JavaScript 操作 Cookie。

Comment 屬性是cookie的產生著對該cookie的描述;

Domain 屬性定義可存取該cookie的域名,對一些大的網站,如果希望cookie可以在子網站中共享,可以使用該屬性。例如設定Domain為 .bigsite.com ,則sub1.bigsite.com和sub2.bigsite.com都可以存取已儲存在客戶端的cookie,這時還需要將Path設定為/。

Max-Age 屬性定義cookie的有效時間,用秒計數,當超過有效期限後,cookie的資訊不會從客戶端附加在HTTP訊息標頭中傳送到服務端。

Path 屬性定義網站上可以存取cookie的頁面的路徑,缺省狀態下Path為產生cookie時的路徑,此時cookie可以被該路徑以及其子路徑下的頁面存取;可以將Path設定為/,使cookie可以被網站下所有頁面存取。

Secure 屬性值定義cookie的安全性,當值為true時必須是HTTPS狀態下cookie才從客戶端附加在HTTP訊息中傳送到服務端,在HTTP時cookie是不發送的;Secure為false時則可在HTTP狀態下傳遞cookie,Secure缺省為false。

Version 屬性定義cookie的版本,由cookie的建立者定義。

5、cookie的使用:
由伺服器端建立要記錄的訊息,然後傳遞到客戶端,由客戶端從HTTP訊息中取出訊息,保存在本機磁碟上。當客戶端再次存取伺服器端時,從本機磁碟上讀出原來保存的信息,附加到HTTP訊息中發送給伺服器端,伺服器端從HTTP訊息中讀取訊息,根據實際應用的需求進行進一步的處理。

6、由於cookie資訊以明文方式保存在文字檔案中,對一些敏感資訊如口令、銀行帳號如果要保存在本地cookie檔案中,最好採用加密形式。

二、Session詳解

1、Session即回話,指一種持續性的、雙向的連結。 Session與Cookie在本質上沒有區別,都是針對HTTP協定的限製而提出的一種保持客戶端和伺服器間保持會話連線狀態的機制。 Session也是一個通用的標準,但在不同的語言中實作有所不同。針對Web網站來說,Session指使用者在瀏覽某個網站時,從進入網站到瀏覽器關閉這段時間內的會話。 Session其實是一個特定的時間概念
2、Session是透過sessionID判斷客戶端使用者的,也就是Session檔案的檔案名稱。 sessionID其實是在客戶端和服務端之間透過HTTP Request 和 HTTP Response傳來傳去。 sessionID依照一定的演算法生成,必須包含在 HTTP Request 裡面,確保唯一性和隨機性,以確保Session的安全。如果沒有設定 Session 的產生週期, sessionID儲存在記憶體中,關閉瀏覽器後該ID自動登出;重新要求該頁面,會重新註冊一個sessionID。如果客戶端沒有停用Cookie,Cookie在啟動Session回話的時候扮演的是儲存sessionID 和 Session 生存期的角色。 Session過期後,PHP會回收。

三、session與cookie的區別:

1、session 在伺服器端,cookie 在客戶端(瀏覽器)
2、session 存在在伺服器的一個檔案裡(預設),不是記憶體
3、session 的運行依賴session id,而session id 是存在cookie 中的,也就是說,如果瀏覽器停用了cookie ,同時session 也會失效(當然也可以在url 中傳遞)
4、session 可以放在文件,資料庫,或記憶體中都可以。
5、使用者驗證這種場合一般會用session因此,維持一個會話的核心就是客戶端的唯一標識,即session id
6、session如果佔據太多內存會給伺服器服務性能造成一定的負擔。 cookie保存的資料有限
7、session保存的是對象,cookie保存的是字串類型的鍵值對。
解釋
由於HTTP協定是無狀態的協議,所以當服務端需要記錄用戶的狀態時,就需要用某種機制來識具體的用戶,這個機制就是Session.典型的場景例如購物車,當你點擊下單按鈕時,由於HTTP協議無狀態,所以並不知道是哪個用戶操作的,所以服務端要為特定的用戶創建了特定的Session,用用於標識這個用戶,並且追蹤用戶,這樣才知道購物車裡面有幾本書。這個Session是保存在服務端的,有一個唯一識別。 在服務端保存Session的方法很多,記憶體、資料庫、檔案都有。 集群的時候也要考慮Session的轉移,在大型的網站,一般會有專門的Session伺服器集群,用來保存用戶會話,這個時候Session 資訊都是放在內存的,使用一些緩存服務比如Memcached之類的來放Session。
思考一下服務端如何辨識特定的客戶?這時候Cookie就登場了。每次HTTP請求的時候,客戶端都會傳送對應的Cookie訊息到服務端。實際上大多數的應用程式都是用Cookie 來實作Session追蹤的,第一次建立Session的時候,服務端會在HTTP協定中告訴客戶端,需要在Cookie 裡面記錄一個Session ID,以後每次要求把這個會話ID傳送到伺服器,我就知道你是誰了。有人問,如果客戶端的瀏覽器停用了 Cookie 怎麼辦?一般這種情況下,會使用一種叫做URL重寫的技術來進行會話跟踪,即每次HTTP交互,URL後面都會被附加上一個諸如 sid=xxxxx 這樣的參數,服務端據此來識別用戶。
Cookie其實還可以用在一些方便使用者的場景下,設想你某次登陸過一個網站,下次登入的時候不想再輸入帳號了,怎麼辦?這個資訊可以寫到Cookie裡面,造訪網站的時候,網站頁面的腳本可以讀取這個訊息,就自動幫你把用戶名給填了,能夠方便一下用戶。這也是Cookie名稱的由來,給使用者的一點甜頭。所以,總結一下:Session是在服務端保存的資料結構,用來追蹤使用者的狀態,這個資料可以保存在叢集、資料庫、檔案中;Cookie是客戶端保存使用者資訊的一種機制,用來記錄用戶的一些訊息,也是實現Session的一種方式。

四、Web Storage

web storage 是在客戶端保存數據,HTML5 提供的在客戶端儲存資料的新方法,分為兩種:localStorage和sessionStorage;  使用它可以在客戶端本地建立一個資料庫,原本保存在伺服器端資料庫中的內容可以直接保存在客戶端本地,大大減輕了伺服器端的負擔,同時加快了存取資料的速度。
1、localStorage:資料永久保存。將資料保存在客戶端本地的硬體設備(硬碟或其他硬體設備)中,即使瀏覽器關閉了,該資料任然存在。 localStorage的作用域是限定在文檔來源層級的,不同的文檔來源之間是不能讀取和修改對方的資料的,而相同的文檔來源是可以的。但是不同的瀏覽器是不共享Storage的,也就是說你在Chorme瀏覽器裡存的數據,在Firefox裡是訪問不到的,即使它們是同一文檔源。  
2、sessionStorage:資料暫存。資料儲存在session物件中。儲存時間為從進入網頁到瀏覽器網頁關閉所經過的這段時間。 sessionStorage的作用域同樣是限定在文件來源層級的,不僅如此,它還被限制在標籤頁中,不同標籤頁的同一個頁面擁有各自的sessionStorage,資料不能共用。如果是一個頁面裡有兩個iframe元素,它們是共享sessionStorage的。

以上是關於函數cookie、session、storage總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn