学海荡舟手机网

主页 > 实用文摘 > 教育文摘_07 > > 详细内容

用ASP检测浏览器是否允许Cookie功能的方法_信息技术论文

用asp检测浏览器是否允许cookie功能的方法

 

作  者:董云  yun dong

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

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

电话号码:020-82130556

邮政编码:510730

电子邮件:dy168@163.net

 

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

解决方法和源代码

关键词:浏览器、cookie、记录区

 

一、前言

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

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

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

 

二、问题的提出

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

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

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

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

易地完成任务。

cookie_test.asp

 

<%@ language="vbscript" %>

<%

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

 

<%@ language="vbscript" %>

<%

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

%>

<html>

<head>

 <title>检测浏览器是否允许cookie功能</title>

</head>

该浏览器cookies功能: <%= bcookies %>

</body>

</html>

 

cookie_detect.asp

 

<%@ language="vbscript" %>

<%

option explicit

response.buffer = true

 dim bcookiesenabled

   bcookiesenabled = request.cookies("cookie_test")

   bcookiesenabled = (bcookiesenabled = "true")

   response.redirect "cookie.asp" & "?cookies=" & bcookiesenabled

%>