用ASP检测浏览器是否允许Cookie功能的方法

时间:2022-10-05 07:46:16

用ASP检测浏览器是否允许Cookie功能的方法

用ASP检测浏览器是否允许Cookie功能的方法

者:董云 YUN DONG

工作单位:黄埔海关技术处工程师

通讯地址:广州市经济技术开发区志诚大道海关大楼

电话号码:020-82130556

邮政编码:510730

电子邮件:

摘 要:指出用ASP检测浏览器Cookie功能的误区,说明错误的原因,并给出

解决方法和源代码

关键词:浏览器、Cookie、信息记录区

一、前言

检测浏览器是否允许Cookie功能其实并不困难。许多的文章都讨论到这个问题,但是,这

些文章中往往存在着许多问题,使得读者容易混淆,甚至有些文章中所给出的方法根本就是

错误的。本文将一步一步地详细解释困难所在,并给出实用的ASP代码。

二、问题的提出

尽管现在的浏览器基本上都支持Cookie功能,但是用户可以通过设置将Cookie功能禁止,

对于希望将一些信息记录到浏览器上去的Web服务器,就必须要清楚前来访问的用户浏览

器是否支持Cookie功能,惟一的办法就是自己去测试用户浏览器是否支持Cookie。这个问

题似乎十分简单,正如许多文章中所介绍的一样,我先给出一段ASP代码,它似乎可以轻

易地完成任务。

Cookie_test.asp

]]>

Option Explicit

Dim CookieValueset

Dim CookieValueRead

CookieValueset="true"

CookieValueRead="false"

Response.Cookies("Cookie_test") = CookieValueset

Response.Cookies("Cookie_test").Expires = Date + 1

CookieValueRead = Request.Cookies("Cookie_test")

If CookieValueRead = CookieValueSet Then

Response.Write "浏览器支持Cookies"

Else

Response.Write "浏览器不支持Cookies"

End If

%>]]>

实际上,上述代码在浏览器允许和禁止Cookie功能的情况下,均得到浏览器支持Cookie功

能的结果。为什么会产生这样的结果呢?首先让我们来看一下Cookie的原理。浏览器是遵

循HTTP协议访问Web服务器的,一个完全的HTTP请求是由浏览器发出申请,Web服务

器回应其申请的内容,在这个过程中,浏览器会提供一块信息记录区来存储一些特殊的信息,

这个信息记录区是可以由浏览器和Web服务器同时访问的,而Cookie就保存在这个信息记

录区中。通过这个信息记录区,Web服务器可以写入Cookie以记录一些信息,并且可以在

将来进行访问,直到这个Cookie的生命期终止。在ASP代码中的Response.Cookies和

Request.Cookies类就是用来访问Cookie的。

现在的问题在于,按照HTTP协议,在往浏览器中写入Cookie后,其内容实际上存在于缓

存之中,直到该页面终止,才将内容写入到浏览器提供的信息记录区中去。在同一页面中写

入Cookie后立即读出其内容,读出的是缓存中的临时信息,而不是信息记录区中真正的

Cookie内容,所以在上面的代码中,即使浏览器禁止Cookie功能,仍然得到成功写入Cookie

的结果。

三、问题的解决

要解决这个问题,可以有两个办法,第一个办法是利用两个页面文件来分别进行Cookie的

写入和读出,在第一个文件中写入Cookie,然后转向第二个文件读出并判断,这样可以轻

易地得到正确的结果。但访问两个页面文件的方法显然对Web服务器的管理添加了麻烦,

在不担心这个问题的前提下,这是一个最佳的解决方法。

第二个办法是利用ASP中的REDIRECT语句来解决问题,如下笔者给出ASP源代码。浏>

览器访问Cookie.asp,这个文件中含有一些代码判断Cookie检查是否已经作过,如果是,

则显示检查结果,如果没有,则自动转向Cookie_Detect.asp文件,在该文件中测试Cookie

功能并将结果传回给Cookie.asp。值得强调的是,我们不能使用ASP的Cookies和Sessions,

因为它们都是利用前面所提的信息记录区来存储信息的,当Cookie功能禁止后,不可跨页

面使用。因此,笔者使用了QuerySring 来传递参数。

四、源代码

Cookie.asp

]]>

Option Explicit

Response.Buffer = True

Dim bCookies ' T/F indicating Cookies enabled.

bCookies = Request.QueryString("Cookies")

Select Case LCase(bCookies)

Case "true", "false"

' We got a valid response.

bCookies = CBool(bCookies)

Case Else

Response.Cookies("Cookie_test") = "true"

Response.Redirect "Cookie_detect.asp"

End Select

%>]]>

检测浏览器是否允许Cookie功能

该浏览器Cookies功能: <%= bCookies %>

Cookie_detect.asp

]]>

Option Explicit

Response.Buffer = True

Dim bCookiesEnabled

bCookiesEnabled = Request.Cookies("Cookie_test")

bCookiesEnabled = (bCookiesEnabled = "true")

%>]]>

Response.Redirect "Cookie.asp" & "?Cookies=" & bCookiesEnabled

%>

上一篇:河南省人民政府办公厅关于贯彻落实《失业保险... 下一篇:公疗医院关于对私收费漏收费跑处方走穴等违纪...