Cookie與Session的詳細講解
Cookie和Session是兩種不同的儲存機制。cookie是從一個web頁到下一個頁面的資料傳遞方法,儲存在客戶端;session是讓資料在頁面中持續有效的方法,儲存在伺服器端。兩者對於web網站頁面間資訊傳遞的安全是性必不可少的。
一、Cookie 管理
1、cookie是一種在遠端瀏覽器端儲存資料並以此來跟蹤和識別使用者的機制。意思就是,cookie是web伺服器暫時存放在使用者硬碟上的一個文字檔案,並隨後被web瀏覽器讀取,當用戶再次訪問web網站時,網站通過讀取cookie檔案記錄這位訪客的特定資訊,從而迅速做出響應。
如果用IE瀏覽器訪問web網站時,web伺服器會自動以上述命令的格式生成相應的cookie文字檔案,並存儲在C盤的cookie資料夾中(如圖)
2、cookie常用的三個功能
記錄訪客的某些資訊。(如:記錄訪客訪問網頁的次數;記錄訪客曾經輸入過的資訊;);
在頁面之間傳遞變數。(如:使用者宣告一個變數,要把這個變數傳遞到另一個頁面,那使用者就可以把這個變數以cookie的形式儲存下來,然後在下一個頁面通過讀取cookie來獲取變數的值);
將所檢視的Internet頁儲存在cookie資料夾中,可以提高以後的瀏覽速度;
3、建立Cookie
在PHP中,通過setcookie()函式 建立cookie(如圖)
執行上面的例項,在cookie資料夾下會自動生成一個cookie檔案,cookie的有效時間為60秒,在cookie失效後,cookie檔案自動刪除。
4、讀取Cookie
在PHP中可以用 $_COOKIE[] 來讀取瀏覽器端的cookie值
5、刪除Cookie
cookie被建立後,如果沒有設定它的失效時間,其cookie檔案會在關閉瀏覽器時被自動刪除;如果想在關閉瀏覽器之前刪除cookie,可通過setcookie()函式刪除(重點講解),也可以在瀏覽器中手動刪除(不做講解)。
只需要把時間函式 time()-1 當前時間減1秒即可。
6、cookie的生命週期
如果cookie不設定時間,也就是當瀏覽器關閉時,cookie才會自動消失,這種稱為會話cookie,一般不儲存在硬碟上,而是儲存在記憶體中
如果設定cookie的失效時間,瀏覽器會吧cookie儲存在硬碟中。
瀏覽器最多允許儲存300個cookie檔案,而且每個cookie最大容量為4KB,每個域名最多支援20個cookie,如果達到限制,瀏覽器會自動的隨機刪除cookie。
二、Session 管理
1、session的工作原理
對比cookie,session是儲存在伺服器端的會話,相對安全,並且不像cookie那樣有儲存長度的限制。在計算機專業術語中,session是指一個終端使用者與互動系統進行通訊的時間間隔,因此,session是一個特定的時間概念。當啟動一個session會話時,會生成一個隨機且唯一的session_id,也就是session的檔名,此時,session_id儲存在伺服器的記憶體當中,當關閉頁面時,此id會自動登出,重新登入此頁面,會再次生成一個隨機且唯一的id。
2、session的功能
由於網頁是一種無狀態的連線程式,因此無法得知使用者的瀏覽狀態。通過session則可記錄使用者的有關資訊,以供使用者再次以此身份對Web伺服器提交要求時作確認。
3、啟動會話
啟動PHP會話有兩種:一種使用session_start()函式,一種是session_register()函式。
4、註冊會話
會話變數被啟動後,全部儲存在陣列$_SESSION中
5、使用會話
首先判斷會話ID是否存在,若存在,則輸出會話的值
6、刪除會話
6-1、刪除會話變數,同陣列的操作一樣,直接刪除 $_SESSION 陣列中的某個元素一樣,使用unset()函式,即:unset( $ _SESSION[‘user’])。
6-2、如果想要一次性登出所有的會話變數,可以將一個空的陣列賦值給 $_SESSION ,即: $_SESSION=array()。
6-3、結束當前會話,用session_distroy()函式,這樣可以清空會話中的所有資源,徹底銷燬session。即:session_distroy()
7、session通過cookie設定失效時間
7-1、使用session_set_cookie_params()函式設定失效時間 (一般不常用)
7-2、使用setcookie()函式設定session的失效時間
8、客戶端禁止cookie
當客戶端禁止cookie時,session頁面傳遞會失效,解決這個問題有4中方法。
(1)、在登入之前提醒使用者必須開啟cookie。
(2)、設定php.ini 檔案中的session.use_trans_sid = 1,或者編譯時開啟-enable-trans-sid選項,讓PHP自動跨頁面傳遞session_id。
(3)、通過GET方法,隱藏表單傳遞session-id。
(4)、使用檔案或者資料庫儲存session-id,在頁面傳遞中手動呼叫。