本節針對 Cookie 的技術層次加以說明,以讓同學對 Cookie 有更深一步的瞭解。
Cookie 的概念是由 Netscape 公司首先發展出來,其主要目的是要克服 HTTP protocal 的「無狀態」(Stateless)特性。換句話說,Cookie 的目的就是要記錄使用者之前在網頁上的行為,以便於當使用者回到同一個網頁時,有些相關的紀錄可循。
Netscape 公司所設計的 Cookie,是經由 HTTP 的表頭資訊(Header)來傳送,說明如下:
舉例來說,一個標準的 HTTP Response Header 如下:
- 當用戶端對伺服器產生要求時,其中的表頭資訊「Cookie:」會將相關的 Cookie 送到伺服器端。
- 當伺服器將資訊傳回用戶端時,瀏覽器收到其中的表頭資訊「Set-Cookie:」,就會在用戶端設定相關的 Cookie。
在上例中,「Set-Cookie:」指定了要下載至使用者端的 Cookie 元素。HTTP/1.0 200 OK Date: Tuesday, 09-Nov-99 20:58:25 GMT Server: Open-Market-Secure-WebServer/2.0.5.RC0 MIME-version: 1.0 Security-Scheme: S-HTTP/1.1 Set-Cookie: USER=4wOm1zd2VlbmV5MTk5OQ; Path=/; Domain=.site.com; expires=Wed, 01-Jan-2031 01:01:01 GMT一般在使用瀏覽器,使用者是看不到這些表頭資訊的,若要看到這些資訊,可以使用 telnet,例如,請在 DOS 視窗輸入下列文字:
telnet neural.cs.nthu.edu.tw 80 按下 Enter 鍵後,接著輸入下列文字:HEAD /jang/ HTTP/1.0 (你可能看不到輸入的文字,但是這並不會影響結果。)其中的 HEAD,代表只抓取表頭資訊。輸入完畢後,記得要按「兩次」Enter 鍵,就可以取得一般瀏覽器在顯示我的首頁時,伺服器所回傳的表頭資訊:HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Mon, 30 Oct 2006 05:54:00 GMT Connection: Keep-Alive Content-Length: 7179 Content-Type: text/html Set-Cookie: ASPSESSIONIDQCBCCDTA=AKHDJFHCGGDPDMNAHONKMPEN; path=/ Cache-control: private 如果要取得「Web程式設計、技術與應用」首頁的完整資訊,可以輸入下列文字:GET /jang/books/JavaScript/ HTTP/1.0 其中的 GET,代表抓取完整資訊。按下兩次 Enter 鍵後,傳回的資訊如下:Server: Microsoft-IIS/5.0 Date: Mon, 30 Oct 2006 05:56:31 GMT Connection: Keep-Alive Content-Length: 8967 Content-Type: text/html Set-Cookie: ASPSESSIONIDQCBCCDTA=DLHDJFHCAGGLFCEOJCIBEJLN; path=/ Cache-control: private 我們可以將 Cookie 的設定分為兩部分:JavaScript 程式設計與應用 JavaScript 程式設計與應用
by 張智星
...另外,當瀏覽器對伺服器索取網頁時,也會帶著表頭資訊,稱為 HTTP Requst Header,這部分也會包含與此網頁相關的 Cookie 的資訊,所以伺服器端也可以立刻知道與此網頁相關的 Cookie 資訊,例如之前的拜訪次數或購買項目,等等。因此我們可以對 Cookie 對網頁的作用總結如下:
- 由伺服器直接對用戶進行設定:此部分的 Cookie 資訊就是直接放在由伺服器回傳的表頭,如前所述。有關這方面的細節,我們會在 ASP 相關章節加以說明。
- 由用戶端的 JavaScript 進行設定:此部分是經由用戶端的 JavaScript 來進行設定,請見本章第一節及第二節的說明。。
詳細流程可見此「example/Cookie設定流程說明.ppt」。
- 無論是 Request 或是 Response,Cookie 都會被帶在表頭資訊中傳送。
- 在 Request 時,瀏覽器會將此網頁以前所留下來的 Cookie 以表頭資訊一起傳到伺服器。
- 在 Response 時,伺服器會將此網頁必須設定的 Cookie 以表頭資訊送到伺服器,我們可以使用 ASP 來控制這些由伺服器端指定寫入的 Cookie。
- 此外,當網頁送到用戶端時,我們還可以使用 JavaScript 來指定 Cookie 的讀寫。
JavaScript 程式設計與應用:用於網頁用戶端