Cookie和Session,CookieSession
Cookie:指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。
換句話說,Cookies是一種能夠讓網站伺服器把少量資料儲存到用戶端的硬碟或記憶體,或是從用戶端的硬碟讀取資料的一種技術。Cookies是當你瀏覽某網站時,由Web伺服器置於你硬碟上的一個非常小的文字檔(一般為幾kb大小),它可以記錄你的使用者ID、密碼、瀏覽過的網頁、停留的時間等資訊。當你再次來到該網站時,網站通過讀取Cookies,得知你的相關資訊,就可以做出相應的動作,如在頁面顯示歡迎你的標語,或者讓你不用輸入ID、密碼就直接登入等等。
特點
從本質上講,它可以看作是你的身份證。但Cookies不能作為代碼執行,也不會傳送病毒,且為你所專有,並只能由提供它的伺服器來讀取。儲存的資訊片斷以“名/值”對(name-value pairs)的形式儲存,一個“名/值”對僅僅是一條命名的資料。一個網站只能取得它放在你的電腦中的資訊,它無法從其它的Cookies檔案中取得資訊,也無法得到你的電腦上的其它任何東西。
Cookies中的內容大多數經過了加密處理,因此一般使用者看來只是一些毫無意義的字母數字組合,只有伺服器的CGI處理常式才知道它們真正的含義。
Session:簡單的翻譯過來就是“會話”,“一段時間”的意思,具體到Web中的Session指的就是使用者在瀏覽某個網站時,從進入網站到關閉這個網站所經過的這段時間,也就是使用者瀏覽這個網站所花費的時間。
session的工作原理
(1)當一個session第一次被啟用時,一個唯一的標識被儲存於本地的cookie中。
(2)首先使用session_start()函數,PHP從session倉庫中載入已經儲存的session變數。
(3)當執行PHP指令碼時,通過使用session_register()函數註冊session變數。
(4)當PHP指令碼執行結束時,未被銷毀的session變數會被自動儲存在本地一定路徑下的session庫中,這個路徑可以通過php.ini檔案中的session.save_path指定,下次瀏覽網頁時可以載入使用。
Cookie和Session的區別在哪?
cookie機制採用的是在用戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時,因為伺服器端保持狀態的方案在用戶端也需要儲存一個標識,因此session機制可能需要藉助於cookie機制來達到儲存標識的目的,但實際上它還有其他選擇。
另外,從機制上有以下區別(摘):
cookie機制。正統的cookie分發是通過擴充HTTP協議來實現的,伺服器通過在HTTP的回應標頭中加上一行特殊的指示以提示瀏覽器按照指示產生相應的cookie。然而純粹的用戶端指令碼如JavaScript或者VBScript也可以產生cookie。而cookie的使用是由瀏覽器按照一定的原則在後台自動發送給伺服器的。瀏覽器檢查所有儲存的cookie,如果某個cookie所聲明的作用範圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP要求標頭上發送給伺服器。
cookie的內容主要包括:名字,值,到期時間,路徑和域。路徑與域一起構成cookie的作用範圍。若不設定到期時間,則表示這個cookie的生命期為瀏覽器會話期間,關閉瀏覽器視窗,cookie就消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不儲存在硬碟上而是儲存在記憶體裡,當然這種行為並不是規範規定的。若設定了到期時間,瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie仍然有效直到超過設定的到期時間。儲存在硬碟上的cookie可以在不同的瀏覽器進程間共用,比如兩個IE視窗。而對於儲存在記憶體裡的cookie,不同的瀏覽器有不同的處理方式
session機制。session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來儲存資訊。
當程式需要為某個用戶端的請求建立一個session時,伺服器首先檢查這個用戶端的請求裡是否已包含了一個session標識(稱為session id),如果已包含則說明以前已經為此用戶端建立過session,伺服器就按照session id把這個session檢索出來使用(檢索不到,會建立一個),如果用戶端請求不包含session id,則為此用戶端建立一個session並且產生一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字串,這個session id將被在本次響應中返回給用戶端儲存。
儲存這個session id的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識發揮給伺服器。一般這個cookie的名字都是類似於SEEESIONID。但cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞迴伺服器。
經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面。還有一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,添加一個隱藏欄位,以便在表單提交時能夠把session id傳遞迴伺服器。