用ASP檢測瀏覽器是否允許Cookie功能的方法

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.