VBScript 和 Cookie

什么是 Cookie?

Web浏览器和服务器使用HTTP协议进行通信,HTTP是无状态协议。 但对于商业网站来说,需要维护不同页面之间的会话信息。 例如,一个用户注册在完成许多页面后结束。 但如何在所有网页上维护用户的会话信息。 在许多情况下,使用 cookie 是记住和跟踪偏好、购买、佣金以及更好的访问者体验或网站统计所需的其他信息的最有效方法。

它是如何工作的?

您的服务器以 cookie 的形式向访问者的浏览器发送一些数据。 浏览器可以接受cookie。 如果存在,它将作为纯文本记录存储在访问者的硬盘上。 现在,当访问者到达站点上的另一个页面时,浏览器会将相同的 cookie 发送到服务器以供检索。 一旦检索到,您的服务器就会知道/记住之前存储的内容。 Cookie 是由 5 个可变长度字段组成的纯文本数据记录 −

  • Expires − cookie 过期的日期。 如果此项为空,则当访问者退出浏览器时,cookie 将过期。

  • Domain − 您网站的域名。

  • Path − 设置 cookie 的目录或网页的路径。 如果您想从任何目录或页面检索 cookie,此字段可能为空。

  • Secure − 如果该字段包含单词"secure",则只能通过安全服务器检索 cookie。 如果此字段为空,则不存在此类限制。

  • Name=Value − 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。 您可以使用多个以逗号分隔的key = value对来设置多个cookie。 您将在下一节中了解如何读取此 cookie。

读取 Cookie

读取 cookie 与写入 cookie 一样简单,因为 document.cookie 对象的值就是 cookie。 因此,只要您想访问 cookie,就可以使用该字符串。document.cookie 字符串将保留一个由分号分隔的 name = value 对列表,其中 name 是 cookie 的 name,value 是其字符串值 。您可以使用字符串的 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>

注意 − 这里,UBoundArray类的一个方法,它返回数组的长度。 我们将在单独的章节中讨论数组; 在那之前,请尝试消化它。

它将产生以下结果。 现在,按"获取 Cookie"按钮即可查看您在上一节中设置的 Cookie。

注意 − 您的计算机上可能已经设置了一些其他 cookie。 因此,上面的代码将显示您机器上设置的所有 cookie。

设置 Cookie 到期日期

您可以通过设置到期日期并将到期日期保存在 cookie 中,将 cookie 的生命周期延长到当前浏览器会话之后。 这可以通过将 expires 属性设置为日期和时间来完成。

示例

以下示例说明如何设置 1 个月后的 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 的过期日期设置为过去 1 个月来删除 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>