ASP教程:學(xué)習(xí)ASP應(yīng)用Cookies的技巧_ASP教程

      編輯Tag賺U幣
      教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

      推薦:常見(jiàn)的80004005錯(cuò)誤及其解決方法
      在編寫(xiě)WEB應(yīng)用程序的過(guò)程中,我們常常要跟數(shù)據(jù)庫(kù)打交道,例如我們?nèi)粘=?jīng)常用的數(shù)據(jù)庫(kù)ACCESS、SQL SERVER等。在連接這些數(shù)據(jù)庫(kù)的時(shí)候,系統(tǒng)往往會(huì)給我們一些象這類“80004005”錯(cuò)誤,

      什么是 Cookie?Cookie 其實(shí)是一個(gè)標(biāo)簽,經(jīng)常可能聽(tīng)到的中文翻譯:小舔餅。當(dāng)你訪問(wèn)一個(gè)需要唯一標(biāo)識(shí)你的站址的 WEB 站點(diǎn)時(shí),它會(huì)在你的硬盤(pán)上留下一個(gè)標(biāo)記,下一次你訪問(wèn)同一個(gè)站點(diǎn)時(shí),站點(diǎn)的頁(yè)面會(huì)查找這個(gè)標(biāo)記。

      每個(gè) WEB 站點(diǎn)都有自己的標(biāo)記,標(biāo)記的內(nèi)容可以隨時(shí)讀取,但只能由該站點(diǎn)的頁(yè)面完成。每個(gè)站點(diǎn)的Cookie與其他所有站點(diǎn)的Cookie存在同一文件夾中的不同文件內(nèi)(你可以在 win98 的 Windows 目錄下的 Cookie 文件夾中找到它們,而 win2k 則在 Documents and Settings 文件夾下特定用戶的 cookies 文件夾中)。

      一個(gè) Cookie 就是一個(gè)唯一標(biāo)識(shí)客戶的標(biāo)記,Cookie 可以包含在一個(gè)對(duì)話期或幾個(gè)對(duì)話期之間某個(gè) WEB 站點(diǎn)的所有頁(yè)面共享的信息,使用 Cookie 還可以在頁(yè)面之間交換信息。這項(xiàng)功能經(jīng)常被使用在要求認(rèn)證客戶密碼以及電子公告板、WEB 聊天室等 ASP 程序中。

      盡管現(xiàn)在聽(tīng)起來(lái)cookie沒(méi)有什么激動(dòng)人心的,但實(shí)際上利用它,你能實(shí)現(xiàn)許多有意義的功能!比如說(shuō):你可以在站點(diǎn)上放置一個(gè)調(diào)查問(wèn)答表,詢問(wèn)訪問(wèn)者最喜歡的顏色和字體,然后根據(jù)這些定制用戶的web界面。并且,你還可以保存訪問(wèn)者的登錄密碼,這樣,當(dāng)訪問(wèn)者再次訪問(wèn)這個(gè)站點(diǎn)時(shí),不用再輸入密碼進(jìn)行登錄。

      當(dāng)然,cookie也有一些不足。首先,由于利用cookie的功能可以編程實(shí)現(xiàn)一些不良企圖,所以大多數(shù)的瀏覽器中都有安全設(shè)定,其中可以設(shè)置是否允許或者接受cookie(IE瀏覽器中“工具”--“Internet選項(xiàng)...”--“安全”--“自定義級(jí)別”--“Cookie的使用”;Netscape瀏覽器中“工具”--“Cookie管理器”--“管理貯存的Cookie”即可),因此這就不能保證隨時(shí)能使用cookie。再者,訪問(wèn)者可能有意或者無(wú)意地刪除cookie。當(dāng)訪問(wèn)者的機(jī)器遇到“藍(lán)屏”死機(jī)時(shí),或者重新格式化硬盤(pán)、安裝系統(tǒng)后,原來(lái)保存的cookie將全部丟失。最后一點(diǎn),有一些最初始的瀏覽器并不能支持cookie。

      ◆ 怎樣利用cooklie?

      有2種使用cookie的基本方式:

      1、將cookie寫(xiě)入訪問(wèn)者的計(jì)算機(jī)(使用 Response 命令)

      2、從訪問(wèn)者的計(jì)算機(jī)中取回cookie(使用 Request 命令)

      ◆ 創(chuàng)建cookie的基本語(yǔ)法: Response.Cookies(cookie)[(key)|.attribute]=value

      這里的 cookie 是指定 cookie 的名稱。

      而如果指定了 key,則該 cookie 就是一個(gè)字典。

      (測(cè)試一cookie是否為一個(gè)字典可用后面代碼顯示布爾值:<%=Request.Cookies("cookiename").HasKeys%>。為true是字典,false則不是。 )

      Attribute 指定 cookie 自身的有關(guān)信息。Attribute 參數(shù)可以是下列之一 :

      ①Domain 若被指定,則 cookie 將被發(fā)送到對(duì)該域的請(qǐng)求中去。域?qū)傩员砻鱟ookie由哪個(gè)網(wǎng)站產(chǎn)生或者讀取,默認(rèn)情況下,cookie的域?qū)傩栽O(shè)置為產(chǎn)生它的網(wǎng)站,但你也可以根據(jù)需要改變它。(Response.Cookies("CookieName").Domain = "www.wf0088.com")

      ②Path 為一路徑屬性,該屬性可以實(shí)現(xiàn)更多的安全要求,通過(guò)設(shè)置網(wǎng)站上精確的路徑,就能限制cookie的使用范圍。如果未設(shè)置該屬性,則使用應(yīng)用程序的路徑。(Response.Cookies("CookieName").Path = "/maindir/subdir/path" )

      ③Expires 指定 cookie 的過(guò)期日期。為了在會(huì)話結(jié)束后將 cookie 存儲(chǔ)在客戶端磁盤(pán)上,或在許多時(shí)候,我們希望能更長(zhǎng)時(shí)間地在訪問(wèn)者的計(jì)算機(jī)上保存cookie。必須設(shè)置該日期。若此項(xiàng)屬性的設(shè)置未超過(guò)當(dāng)前日期,則在任務(wù)結(jié)束后 cookie 將到期。

      后面的代碼,就可以設(shè)置cookie的使用到期時(shí)間為“2010年1月1日”: Response.Cookies("CookieName").Expires=#January 01, 2010#

      后面的代碼,將設(shè)定cookie的過(guò)期時(shí)間為“cookie的創(chuàng)建時(shí)間+365天”:Response.Cookies("CookieName").Expires=Date 365

      但最好不要隨便寫(xiě) Response.Cookies("CookieName").Expires=Date,這樣頁(yè)面之間的調(diào)用時(shí)值會(huì)為空。

      執(zhí)行下面的代碼將會(huì)在訪問(wèn)者的計(jì)算機(jī)中創(chuàng)建一個(gè)cookie,名字=VisitorName,值=Ken :
      Response.Cookies("VisitorName")="Ken"

      執(zhí)行下面的代碼將會(huì)在訪問(wèn)者的計(jì)算機(jī)中創(chuàng)建一個(gè)cookie,名字=VisitorName,值=表單中UserName的值

      Response.Cookies("VisitorName")=Request.Form("UserName")

      你可以擴(kuò)展下面的代碼成為Cookie子關(guān)鍵值(CookieSubName),即cookie字典的生成。代碼如下:

      Response.Cookies("VisitorName")("FirstName")="Ken"

      Response.Cookies("VisitorName")("LastName")="Baumbach"

      ◆ 讀取cookie的基本語(yǔ)法:Request.Cookies(cookie)[(key)|.attribute]

      cookie 指定要檢索其值的 cookie。

      key 可選參數(shù),用于從 cookie 字典中檢索子關(guān)鍵字的值。

      attribe 指定 cookie 自身的有關(guān)信息。如:HasKeys 只讀,指定 cookie 是否包含關(guān)鍵字。

      如果客戶端瀏覽器發(fā)送了兩個(gè)同名的 cookie,那么 Request.Cookie 將返回其中路徑結(jié)構(gòu)較深的一個(gè)。例如,如果有兩個(gè)同名的的 cookie,但其中一個(gè)的路徑屬性為 /www/ 而另一個(gè)為 /www/home/,客戶端瀏覽器同時(shí)將兩個(gè) cookie 都發(fā)送到 /www/home/ 目錄中,那么 Request.Cookie 將只返回第二個(gè) cookie。

      案例分析:

      ◆ num.asp(通過(guò)留在本地磁盤(pán)上的cookie記錄一年內(nèi)訪問(wèn)本站的次數(shù),第一次顯示“首次訪問(wèn)”,以后顯示“第幾次訪問(wèn)”)

      以下為引用的內(nèi)容:

      <%
      dim num
      num=request.cookies("visitnum")
      if num > "0" then
      num=num 1
      Response.write "您已是第"&num&"次訪問(wèn)本站點(diǎn)了。"
      else
      Response.write "歡迎您首次訪問(wèn)本站。"
      num=1
      end if
      response.cookies("visitnum")=num
      response.cookies("visitnum").expires=date 365
      %>

      ◆ showcookie.asp(從Cookies文件夾中遍歷出瀏覽器所有的Cookie name,以及相關(guān)的字典Cookie的顯示(藍(lán)字顯示))

      以下為引用的內(nèi)容:
      <%
      For each cookie in Request.Cookies
      if Request.cookies(cookie).HasKeys =false then
      Response.write cookie & "=" & Request.Cookies(cookie)
      Response.write ("<br>")
      Else
      for each key in Request.Cookies(cookie)
      Response.write ("<font color=blue>")
      Response.write cookie & ".("&key&")" & "=" & Request.Cookies(cookie)(key)
      Response.write ("</font><br>")
      next
      end if
      next
      %>

      ◆ check.asp

      '首先,設(shè)置頁(yè)面。然后,檢查表單變量(在同一個(gè)頁(yè)面中)。如果表單變量存在,就創(chuàng)建cookie,并設(shè)置到期時(shí)間。

      以下為引用的內(nèi)容:
      <%@ LANGUAGE="VBSCRIPT" %>
      <%
      bgcolor = Request.Form("bgcolor")
      fgcolor = Request.Form("fgcolor")
      pwd = Request.form("pwd")
      If bgcolor <>"" or fgcolor <>"" then
      Response.cookies("check")("bgcolor") = bgcolor
      Response.Cookies("check")("fgcolor") = fgcolor
      Response.Cookies("check")("pwd") = pwd
      Response.Cookies("check").Expires=#may 01, 2004#
      End if
      '接著,讀取cookie
      bgcolor = request.cookies("check")("bgcolor")
      fgcolor = request.cookies("check")("fgcolor")
      pwd = request.cookies("check")("pwd")
      '如果cookie在訪問(wèn)者的計(jì)算機(jī)上不存在,就創(chuàng)建一個(gè)表單,詢問(wèn)相關(guān)信息
      If bgcolor ="" and fgcolor ="" and pwd="" then
      %>
      <HTML>
      <HEAD> </HEAD>
      <body>
      <DIV ALIGN="CENTER" >
      <Form action="check.asp" method="POST">
      Bgcolor: <input type="text" name="bgcolor"><BR>
      Fgcolor: <input type="text" name="fgcolor"><BR>
      Password:<input type="password" name="pwd"><BR>
      <input type="submit" value="Submit">
      </Form>
      </DIV>
      </BODY>
      <%
      End if
      '如果cookie已經(jīng)存在,并且bgcolor存在,就跳轉(zhuǎn)到color.asp。
      If bgcolor <> "" then
      Response.Redirect "color.asp"
      End if
      %>

      ◆ color.asp(顯示用戶愛(ài)好顏色的頁(yè)面特性)

      以下為引用的內(nèi)容:

      <%
      bgcolor=request.cookies("check")("bgcolor")
      fgcolor=request.cookies("check")("fgcolor")
      pwd=request.cookies("check")("pwd")
      %>
      <%response.write("<body bgcolor="&bgcolor&"><font color="&fgcolor&">")%>
      你的密碼是:
      <%response.write(" "&pwd&" ")%>

      來(lái)源:模板無(wú)憂//所屬分類:ASP教程/更新時(shí)間:2008-08-22
      相關(guān)ASP教程