用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
%>