學PHP不能不懂的cookie知識

2021-06-21 05:43:56 字數 1789 閱讀 5899

一、生活中的cookie

無論你知不知道cookie是什麼,在你的生活中,肯定有使用過它。還記得你使用瀏覽器瀏覽網頁時,當你要登陸時,網頁上有乙個記住密碼或自動登陸的選項,當你選擇時,你就使用了cookie。那麼在下次訪問該**時,你可能就已經自動地登陸了,而不需要從重輸入使用者名稱和密碼,至於它是怎麼實現的,我們在下面說明。

為什麼會有cookie的存在?因為http伺服器是無狀態的,即它不會記錄任何的使用者和連線資訊。而乙個web站點通常希望能夠識別使用者,既可能是因為伺服器想限制使用者的訪問,或可能是因為它想把內容與使用者身份關聯起來。為此,http使用了cookie,它可以跟蹤使用者。

二、cookie技術的組成

在了解cookie的工作原理之前,我們先來了解一下cookie技術的組成,它由4部分組成,如下:

(1)在http響應報文中有乙個cookie首部行;

(2)在http請求報文中有乙個cookie首部行;

(3)在使用者端系統中保留有乙個cookie檔案,由使用者瀏覽器管理;

(4)在web站點有乙個後端資料庫;

三、cookie的工作原理

在了解了cookie技術的組成之後,我們來看看cookie是怎麼工作的。下面就以主機a中的瀏覽器訪問*****作為例子來分析cookie的工作原理吧。

首先主機a使用瀏覽器上網,當主機a第一次訪問*****時,當請求報文到達***的web伺服器時,該web伺服器將產生乙個唯一識別碼(例如:12345),並以此作為索引在它的後端資料庫中產生乙個表項,並用set-cookie:首部行和剛才產生的值為設定http響應報文的首部。這樣在http響應報文的首部,我們就可以看到這樣的乙個首部行——set-cookie: 12345.

當主機a的瀏覽器收到該http響應報文時,它會看到set-cookie:首部,然後瀏覽器在它的本地cookie檔案上加入一行,其中包括set-cookie:首部行中的識別碼。

由於主機a的cookie檔案已經有了用於*****的表項,因此當主機a的瀏覽器繼續瀏覽*****時,每請求乙個web頁面,其瀏覽器就會從它的cookie檔案中獲取到*****的識別碼,並放入http請求報文中cookie首部行中,即加入了首部行cookie: 12345。

當*****的伺服器收到該包含cookie首部行的http請求報文後,伺服器通過查詢後端伺服器,確定cookie標識碼對應的使用者,從而可以直接知道使用者的資訊(即知道確實有乙個這樣的使用者,不久前登陸過該**)。

注意,在cookie的方式下,*****的伺服器可以跟蹤主機a在該站點的活動,*** web站點並不需要知道主機a的使用者是誰,但是,它確切地知道使用者12345訪問了哪些頁面,按照什麼順序,在什麼時間。

簡單點來說,cookie用於標識使用者,使用者首次訪問站點時,可能需要提供乙個使用者標識,但在後繼的訪問中,瀏覽器向伺服器傳遞乙個cookie首部,供伺服器識別該使用者。因此cookie可以在無狀態的http上建立乙個使用者會話層,允許伺服器通過使用者與應用程式之間的會話對使用者進行驗證。

四、cookie帶來的問題

然而,cookie的使用可能會帶來一定的問題。

第一,就是使用者的隱私問題,從上面的討論中,我們可以看到,**能過我們的cookie識別號,可以知道我們在什麼時候做過什麼事情。

第二,就是資訊的安全問題,從上面的論述中,我們可以知道,伺服器並沒有進行必要的檢查,即伺服器取出包含cookie首部行的請求報文的cookie識別號,再到後端伺服器查詢,就能確定使用者,而不管這個請求報文是否是由原本的主機傳送的報文。換句話來說,如果不懷好意的人,拿到了我們的cookie識別號,並用我們的cookie標識號填充http請求報文,傳送給*****的web伺服器,就能冒充我們去做很多他想做的事情,獲得很多他們想獲得的資訊。

**

學程式設計的人不能不看的好文章

long fn long n for i 1 i n i return temp 搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當n 很大的時候我這個程式執行效率很低,在嵌入式系統的開發中,程式的執行效率很重要,能讓cpu少執行一條指令都是好的,他讓我看看這個程式...

學程式設計的人不能不看的好文章

long fn long n for i 1 i n i return temp 搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當 n 很大的時候我這個程式執行效率很低,在嵌入式系統的開發中,程式的執行效率很重要,能讓cpu少執行一條指令都是好的,他讓我看看這個程...

學程式設計的人不能不看的好文章

long fn long n for i 1 i n i return temp 搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當 n 很大的時候我這個程式執行效率很低,在嵌入式系統的開發中,程式的執行效率很重要,能讓cpu少執行一條指令都是好的,他讓我看看這個程...