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>
广告