摘要: 在網絡技術迅猛發展的今天,人性化的網站建設越來越得到設計開發人員的重視,Cookie和Session機制的使用,可以大大提高網站運行的效率。但很多用戶往往分不清Cookie和Session機制的區別和聯系,本文就這兩機制進行初步探討,對Cookie和Session機制的概念、原理和用途做簡要的區別。
關鍵詞: Cookie Session客戶請求 變量傳遞
1.Cookie概念、用途及工作原理
Cookie技術最先被Netscape公司引入到Navigator瀏覽器中。之后,WWW協會支持并采納了Cookie標準,微軟也在Internet Explorer瀏覽器中使用了Cookie。現在,絕大多數瀏覽器都支持Cookie,或者至少兼容Cookie技術的使用。按照Netscape官方文檔中的定義,Cookie是指在HTTP協議下,服務器或腳本可以維護客戶端計算機上信息的一種方式。通俗地說,Cookie是一種能夠讓網站Web服務器把少量數據儲存到客戶端的硬盤或內存里,或是從客戶端的硬盤里讀取數據的一種技術。
Cookie最根本的用途是能夠幫助Web站點保存有關訪問者的信息。更概括地說,Cookie是一種保持Web應用程序連續性(即執行“狀態管理”)的方法。瀏覽器和Web服務器除了在短暫的實際信息交換階段以外總是斷開的,而用戶向Web服務器發送的每個請求都是單獨處理的,與其他所有請求無關。然而在大多數情況下,都有必要讓Web服務器在您請求某個頁面時對您進行識別。Cookie的作用就類似于名片,它提供了相關的標識信息,可以幫助應用程序確定如何繼續執行。
Cookie應用的幾條限制。大多數瀏覽器支持最多可達4096字節的Cookie,如果要將為數不多的幾個值保存到用戶計算機上,這一空間已經足夠大,但你不能用一個Cookie來保存數據集或其他大量數據。在實際應用中,你可能并不希望在Cookie中保存大量的用戶信息,而只希望保存用戶編號或其他標識符。之后,當用戶再次訪問你的站點時,你就可以使用該用戶ID在數據庫中查找用戶的詳細信息。瀏覽器還限制了在用戶計算機上保存的Cookie數。大多數瀏覽器只允許每個站點保存20個Cookie。如果試圖保存更多的Cookie,則最先保存的Cookie就會被刪除。還有些瀏覽器會對來自所有站點的Cookie總數做出限制,這個限制通常為300個。最常遇到的Cookie限制是:用戶可以設置自己的瀏覽器,拒絕接受Cookie。
2.Session概念、用途及工作原理
Session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/消息。Session是一種跟蹤和識別用戶的機制,最早出現在動態腳本語言ASP中,在PHP中的使用是從PHP4開始增加的一項功能。Session是指用戶在瀏覽某個網站時,從進入網站第一個網頁開始到瀏覽器關閉所經歷的時間段。當它在服務端完成響應后,服務器就失去與客戶端瀏覽器的聯系。從這點而言,Session是一個特定的時間概念,它能夠存儲當前瀏覽器窗口打開的任何窗口的用戶信息。
當程序需要為某個客戶端的請求創建一個Session的時候,服務器首先檢查這個客戶端的請求里是否已包含了一個Session標識,稱為Session ID。如果已包含一個Session ID則說明以前已經為此客戶端創建過Session,服務器就按照Session ID把這個Session檢索出來使用(如果檢索不到,可能會新建一個);如果客戶端請求不包含Session ID,則為此客戶端創建一個Session并且生成一個與此Session相關聯的Session ID。Session ID的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個Session ID將被在本次響應中返回給客戶端保存。保存這個Session ID的方式可以采用Cookie,這樣在交互過程中瀏覽器可以自動地按照規則把這個標識發揮給服務器。一般這個Cookie的名字都是類似于SEEESION ID。
恰恰是由于關閉瀏覽器不會導致Session被刪除,迫使服務器為Session設置了一個失效時間,當距離客戶端上一次使用Session的時間超過這個失效時間時,服務器就可以認為客戶端已經停止了活動,才會把Session刪除以節省存儲空間。
3.Cookie和Session的區別與聯系
Cookie是客戶端的存儲空間,由瀏覽器來維持。具體來說,Cookie機制采用的是在客戶端保持狀態的方案,而Session機制采用的是在服務器端保持狀態的方案。同時我們也看到,由于在服務器端保持狀態的方案在客戶端也需要保存一個標識,所以Session機制有時需要借助于Cookie機制來達到保存標識的目的,但也有其他選擇,比如說重寫URL和隱藏表單域。
對于Cookie來說,假設我們要驗證用戶是否登陸,就必須在Cookie中保存用戶名和密碼(可能是md5加密后字符串),并在每次請求頁面的時候進行驗證。如果用戶名和密碼存儲在數據庫,每次都要執行一次數據庫查詢,將給數據庫造成多余的負擔。因為我們并不能只做一次驗證。因為客戶端Cookie中的信息是有可能被修改的。而Session就不同了,Session是存儲在服務器端的,遠程用戶沒辦法修改Session文件的內容,因此我們可以單純存儲一個$admin變量來判斷是否登陸,首次驗證通過后設置$admin值為true,以后判斷該值是否為true,假如不是,轉入登陸界面,這樣就可以減少很多數據庫操作了。
Session是由應用服務器維持的一個服務器端的存儲空間,用戶在連接服務器時,會由服務器生成一個唯一的Session ID,用該Session ID為標識符來存取服務器端的Session存儲空間。而Session ID這一數據則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一Session ID提交到服務器端,來存取Session數據。這一過程,是不用開發人員干預的。所以一旦客戶端禁用Cookie,那么Session也會失效。
4.Session和Cookie變量的創建
下面,我們以php代碼實例來簡單了解一下Session和Cookie變量的創建,其使用方法我們就一目了然了。
<?php
Session_start();//開始一個會話,如果要使用Session程序最前面一定要加上這句
$_Session[’user_ID’]=’123’;//給一個Session變量賦值,如果該變量不存在即創建
echo$_Session[’user_ID’];//訪問Session變量
$_Session=array();//清空所有Session變量
Session_destroy();//清除會話ID
//Sessionend
//Cookie start
setCookie(’user_ID’,123);//創建一個Cookie變量user_ID=123
echo $_Cookie[’user_ID’];//訪問Cookie變量和變通變量一樣
setCookie(’user_ID’,0,time()-1);//刪除Cookie變量
//codie end該代碼不可運行,只是將所有使用方法在這里列出,實際應該不同功能在不同頁面使用。
?>
5.結語
具體來說,Cookie機制采用的是在客戶端保持狀態的方案。它是在用戶端的會話狀態的存貯機制,他需要用戶打開客戶端的Cookie支持。Cookie的作用就是為了解決HTTP協議無狀態的缺陷所作的努力。而Session機制采用的是一種在客戶端與服務器之間保持狀態的解決方案。同時我們也看到,由于采用服務器端保持狀態的方案在客戶端也需要保存一個標識,所以Session機制可能需要借助于Cookie機制來達到保存標識的目的。而Session提供了方便管理全局變量的方式。Session是針對每一個用戶的,變量的值保存在服務器上,用一個Session ID來區分是哪個用戶Session變量,這個值是通過用戶的瀏覽器在訪問的時候返回給服務器,當客戶禁用Cookie時,這個值也可能設置為由get來返回給服務器。就安全性來說:當你訪問一個使用Session的站點,同時在本地建立一個Cookie,建議在服務器端的Session機制更安全些。因為它不會任意讀取客戶存儲的信息。顯然,Cookie和Session機制各有優點,我們使用它們的時候,要根據不同的需要采用不同的機制。
參考文獻:
[1]胡忠望,劉衛東.“Cookie應用與個人信息安全研究”.計算機應用與軟件,2007.3,第24卷,第3期.
[2]侯金彪,胡凱,王文博.“php中Session變量的應用研究”.科技信息,2006.
[3][美]R.Allen Wyke.Michael J.Walker著.Robert Cox信達工作室譯.php開發人員手冊[M].北京:人民郵電出版社,2001:207-210.
[4]鄭江波.“PHP中Session機制的研究與應用”.荊門職業技術學院學報,2007.3,第22卷,第3期.