Board logo

標題: [教學] (ASP教學第10篇) Cookies 記錄物件 [打印本頁]

作者: 小誌    時間: 2010-5-12 18:17     標題: (ASP教學第10篇) Cookies 記錄物件

Cookies物件
Application 物件與 Session 物件將資訊記錄在 Server端,而 Cookies物件會藉由瀏覽器所提供之Cookies功能,將資訊記錄在客戶端,也就是說: Cookies 物件是儲存在瀏覽連線者的瀏覽器之中!

我們可用 Cookies 物件的紀錄來判斷某個使用者是否曾經進入本網站。奇怪!雖然Session 物件將資訊記錄在 Server端,但是它也會個別紀錄連線瀏覽者是否曾經進入本網站啊!但是Session 物件的生存期限是很短的,當瀏覽連線者的瀏覽器在設定時間內(預設為20分鐘)沒有向伺服器要求任何資料的話,伺服器就會將Session 物件中的資料全數消除,而 Cookies 物件是存在於瀏覽連線者的瀏覽器中的,即使是瀏覽者離線了,Cookies 物件的資料記錄依然存在!

Cookies 物件是 Response 物件及 Request 物件之屬性,用法如下:
  1. Response.cookies 寫入Cookies
  2. Request.cookies 讀取Cookies
複製代碼

如何證明 Cookies 物件是儲存在瀏覽連線者的瀏覽器之中?

撰寫一含有 Cookies 的網頁, 如下所示:
[attach]296[/attach]
  1. <%
  2. var=request.cookies("var")
  3. if var="" then var=empty
  4. respone.write "開始 Var=" & var "<br>"
  5. var=var+10
  6. response.write "結束 Var=" & var "<br>"
  7. response.cookies("var")=var
  8. %>
複製代碼
執行後會產生卻會產生『型態不符合』的錯誤,如下圖:
[attach]297[/attach]

怎會如此呢?原因如下: Application物件及Session物件其傳回值為empty而 request.cookies卻是傳回 "" (空字串),empty可與數值作運算,"" 卻不可以,解決此一問題可加入一判斷式,如下所示:
  1. if var="" then var=empty
  2. ' 如果var="",則將var設定成empty
複製代碼
[attach]298[/attach]

修改後還是有錯誤,錯誤為『已將HTTP標題寫入用戶端瀏覽器。 對任何HTTP的標題所做的修改必須要在寫入頁內容之前』。
[attach]299[/attach]

原因為瀏覽器與伺服端交換 Cookies資料的時機需在伺服器尚未下載資料給瀏覽器之前就進行交換,否則會出現錯誤,解決方法為用 緩衝區來裝下載的資料,完整程式如下所示:
[attach]300[/attach]
  1. <%
  2. response.buffer=true

  3. var=request.cookies("var")
  4. if var="" then var=empty
  5. response.write "開始 Var=" & var & "<br>"
  6. var=var+10
  7. response.write "結束 Var=" & var & "<br>"
  8. response.cookies("var")=var
  9. %>
複製代碼
現在我們來檢驗一下:以IE 為例,建立在瀏覽器中的 Cookies 物件將會放置在『\WINDOWS\Temporary Internet Files』目錄中,我們先將目錄中的所有資料檔案清除乾淨:
[attach]301[/attach]
接著啟動瀏覽器,開始瀏覽 cookies02.asp ,此時我們將會發現在『\WINDOWS\Temporary Internet Files』目錄中多出了Cookies 的物件檔案,這證明了Cookies 物件是存在於瀏覽連線者的瀏覽器(客戶端)中無誤!
[attach]302[/attach]

Cookies 物件的生命週期起始於瀏覽器被執行時。終止於瀏覽器結束執行時。那如果我們要延長Cookies 物件的生命週期呢?若要延長Cookies 物件的生命週期我們可另用『Expires』屬性來設定Cookies的生命週期,Expires表失效 ,如下所示:
  1. response.cookies("yourID")="cookies"  
  2. response.cookies("yourID").expires="2000/12/31/"
複製代碼
經過expires設定後,yourID之使用期限為2000/12/31。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)