VBScript 和 Cookie



什麼是 Cookie?

Web 瀏覽器和伺服器使用 HTTP 協議進行通訊,而 HTTP 是一種無狀態協議。但對於商業網站來說,需要在不同的頁面之間維護會話資訊。例如,一個使用者註冊需要完成多個頁面才能結束。但是如何跨所有網頁維護使用者的會話資訊呢?在許多情況下,使用 Cookie 是記住和跟蹤偏好、購買、佣金以及其他改善訪客體驗或網站統計資訊所需的最有效方法。

它是如何工作的?

您的伺服器以 Cookie 的形式向訪問者的瀏覽器傳送一些資料。瀏覽器可能會接受 Cookie。如果接受,它將作為純文字記錄儲存在訪問者的硬碟驅動器上。現在,當訪問者訪問您網站上的另一個頁面時,瀏覽器會將相同的 Cookie 傳送回伺服器以進行檢索。檢索後,您的伺服器就知道/記得之前儲存的內容。Cookie 是 5 個變長欄位的純文字資料記錄:

  • 過期時間 - Cookie 將過期的日期。如果為空,則 Cookie 將在訪問者關閉瀏覽器時過期。

  • 域名 - 您網站的域名。

  • 路徑 - 設定 Cookie 的目錄或網頁的路徑。如果您想從任何目錄或頁面檢索 Cookie,則可以為空。

  • 安全 - 如果此欄位包含“安全”一詞,則 Cookie 只能透過安全伺服器檢索。如果此欄位為空,則不存在此類限制。

  • 名稱=值 - Cookie 以鍵值對的形式設定和檢索。

Cookie 最初是為 CGI 程式設計設計的,Cookie 的資料在 Web 瀏覽器和 Web 伺服器之間自動傳輸,因此伺服器上的 CGI 指令碼可以讀取和寫入儲存在客戶端的 Cookie 值。

VBScript 還可以使用 *Document* 物件的 cookie 屬性來操作 Cookie。VBScript 可以讀取、建立、修改和刪除應用於當前網頁的 Cookie。

儲存 Cookie

建立 Cookie 的最簡單方法是將字串值賦給 *document.cookie* 物件,如下所示:

語法

document.cookie = "key1 = value1;key2 = value2;expires = date"

這裡的 *expires* 屬性是可選的。如果您使用有效的日期或時間提供此屬性,則 Cookie 將在給定的日期或時間過期,之後 Cookie 的值將不可訪問。

示例

以下是如何在 *input* Cookie 中設定客戶名稱的示例。

<html>
   <head>
      <script type = "text/vbscript">
         Function WriteCookie
            If document.myform.customer.value = "" Then
               msgbox "Enter some value!"
            Else
               cookievalue = (document.myform.customer.value)
               document.cookie = "name = " + cookievalue
               msgbox "Setting Cookies : " & "name = " & cookievalue
            End If
         End Function
      </script>
   </head>
   
   <body>
      <form name = "myform" action = "">
         Enter name: <input type = "text" name = "customer"/>
         <input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/>
      </form>
   </body>
</html>

它將產生以下結果。現在在文字框中輸入一些內容,然後按“設定 Cookie”按鈕來設定 Cookie。

Enter name:

現在,您的系統有一個名為 *name* 的 Cookie。您可以使用多個以逗號分隔的 *鍵=值* 對來設定多個 Cookie。您將在下一節中學習如何讀取此 Cookie。

讀取 Cookie

讀取 Cookie 與寫入 Cookie 一樣簡單,因為 *document.cookie* 物件的值就是 Cookie。因此,您可以隨時使用此字串來訪問 Cookie。*document.cookie* 字串將保留以分號分隔的 *名稱=值* 對列表,其中 *名稱* 是 Cookie 的名稱,而值是其字串值。您可以使用字串的 *split()* 函式將字串分解為鍵和值,如下所示:

示例

以下是如何獲取上一節中設定的 Cookie 的示例:

<html>
   <head>
      <script type = "text/vbscript">
         Function ReadCookie
            allcookies = document.cookie
            msgbox "All Cookies : " + allcookies
            cookiearray = split(allcookies,";")
            
            For i = 0 to ubound(cookiearray)
               Name  = Split(cookiearray(i),"=")
               Msgbox "Key is : " + Name(0) + " and Value is : " + Name(1)
            Next
         End Function
      </script>
   </head>
   
   <body>
      <form name = "myform" action = "">
         <input type = "button" value = "Get Cookie" onclick = "ReadCookie()"/>
      </form>
   </body>
</html>

注意 - 這裡,*UBound* 是 *Array* 類的方法,它返回陣列的長度。我們將在單獨的章節中討論陣列;在此之前,請嘗試理解它。

它將產生以下結果。現在,按“獲取 Cookie”按鈕檢視您在上一節中設定的 Cookie。

注意 - 您的計算機上可能已經設定了一些其他 Cookie。因此,上面的程式碼將向您顯示計算機上設定的所有 Cookie。

設定 Cookie 過期日期

您可以透過設定過期日期並在 Cookie 中儲存過期日期來延長 Cookie 的生命週期,使其超過當前瀏覽器會話。這可以透過將 *expires* 屬性設定為日期和時間來完成。

示例

以下示例說明如何設定一個月後的 Cookie 過期日期:

<html>
   <head>
      <script type = "text/vbscript">
         Function WriteCookie()
            x = now()
            y = dateadd("m",1,now())  ' Making it to expire next 
            cookievalue = document.myform.customer.value
            document.cookie = "name = "  & cookievalue
            document.cookie = "expires = " & y
            msgbox("Setting Cookies : " & "name=" & cookievalue )
         End Function
      </script>
   </head>
   <body>
      <form name = "myform" action = "">
         Enter name: <input type = "text" name = "customer"/>
         <input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/>
      </form>
   </body>
</html>

刪除 Cookie

有時,您可能想要刪除 Cookie,以便後續嘗試讀取 Cookie 時返回空值。為此,您只需將過期日期設定為過去的時間即可。

示例

以下示例說明如何透過將 Cookie 的過期日期設定為一個月前來刪除 Cookie:

<html>
   <head>
      <script type = "text/vbscript">
         Function WriteCookie()
            x = now()
            x = now()
            a = Month(x)-1
            b = day(x)
            c = year(x)
            d = DateSerial(c,a,b)
            e = hour(x) 
            
            msgbox e
            f = minute(x)
            
            msgbox f
            d = cdate(d & " " & e & ":" & f)
            
            msgbox d
            cookievalue = document.myform.customer.value
            document.cookie = "name = "  & cookievalue
            document.cookie = "expires = " & d
            msgbox("Setting Cookies : " & "name=" & cookievalue )
         End Function
      </script>
   </head>
   <body>
      <form name = "myform" action = "">
         Enter name: <input type = "text" name = "customer"/>
         <input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/>
      </form>
   </body>
</html>
廣告