Asp:Cookies應用指南,詳細程式碼及教學課程
作者:Eve Cole
更新時間:2009-06-24 17:28:30
實際上,在web開發中,cookie只是一個文本文件,當用戶訪問站點時,它就被存儲在用戶使用的計算機上,其中,保存了一些信息,當用戶日後再次訪問這個站點時,web可以將這些資訊提取出來。
儘管現在聽起來cookie沒有什麼令人興奮的,但實際上利用它,你能實現許多有意義的功能!比方說:你可以在網站上放置一個調查問答表,詢問訪客最喜歡的顏色和字體,然後根據這些客製化使用者的web介面。而且,你也可以儲存訪客的登入密碼,這樣,當訪客再次造訪這個網站時,不用再輸入密碼登入。
當然,cookie也有一些不足。首先,由於利用cookie的功能可以編程實現一些不良企圖,所以大多數的瀏覽器中都有安全設定,其中可以設定是否允許或接受cookie,因此這就不能保證隨時能使用cookie。再者,訪客可能有意或無意地刪除
cookie。當訪客的機器遇到「藍色畫面」當機時,或重新格式化硬碟、安裝系統後,原來儲存的cookie將會全部遺失。最後一點,有一些最初始的瀏覽器並不能支援cookie。
利用cooklie能做什麼?
有2種使用cookie的基本方式:
1.將cookie寫入訪客的電腦(使用RESPONSE 指令)
2、從訪客的電腦取回cookie(使用REQUEST 指令)
建立cookie的基本語法
Response.Cookies("CookieName")=value
執行下面的程式碼將會在訪客的電腦中建立一個cookie,名字=VisitorName,值=Ken
Response.Cookies("VisitorName")="Ken"
執行下面的程式碼將會在訪客的電腦中建立一個cookie,名字=VisitorName,值=表單中UserName的值
Response.Cookies("VisitorName")=Request.Form("UserName")
讀取cookie的基本語法
Request.Cookies("CookieName")
可以將Request值當作一個變數看待,執行下面的程式碼,將取回名字為KensCookie的cookie值,並存入變數MyVar:
MyVar=Request.Cookies("KensCookie")
執行下面的程式碼,將判斷名字為KensCookie的cookie值是否為「Yes」:
If Request.Cookies("KensCookie")="Yes" then
功能豐富的cookie
你可以擴充上面的程式碼成為Cookie子關鍵值(CookieSubName),程式碼如下:
Response.Cookies("VisitorName")("FirstName")="Ken"
Response.Cookies("VisitorName")("LastName")="Baumbach"
在講解例子前,最後討論2個概念:命令約定和使用到期時間。
命名約定
同其他變數的命名一樣,適當地、獨特地命名cookie,有利於在程式中前後連貫地使用它。你可以使用下面的1個或2個
cookie屬性進行cookie變數的命名:
網域屬性(Domain):網域屬性表示cookie由哪個網站產生或讀取,預設情況下,cookie的網域屬性設定為產生它的網站,但你也可以根據需要改變它。相關程式碼如下:Response.Cookies("CookieName").Domain = " www.mydomain.com "
路徑屬性(Path):路徑屬性可以實現更多的安全需求,透過設定網站上精確的路徑,就能限制cookie的使用範圍。例如:
Response.Cookies("CookieName").Path = "/maindir/subdir/path"
使用到期時間
通常情況下,當瀏覽器關閉時,一個cookie就不存在了。但是在許多時候,例如下面將要討論的web站點例子,我們希望能更長時間地在訪客的電腦上保存cookie。很幸運,有這樣的實作方法。下面的程式碼,就可以設定cookie的使用到期時間為2010年
1月1日:
Response.Cookies("CookieName").Expires=#January 01, 2010#
執行下面的程式碼,將設定cookie的過期時間為「cookie的建立時間+365日」:
Response.Cookies("CookieName")=Date+365
使用cookie的實際例子(非常精彩)
現在開始討論實際的例子。假設:你想做一個調查,每個人初次訪問時需要填寫好信息,但是當日後再訪問時,就不需要再那麼做。利用cookie,就可以非常圓滿地解決這個問題,而大可不必用到資料庫。
< %@ LANGUAGE="VBSCRIPT" % >
< %
Survey=Request.Cookies("KensSurvey")
If Survey ="" then
Response.Cookies("KensSurvey")="x"
Response.Cookies("KensSurvey").Expires=#January 01, 2010#
Response.Redirect "survey.asp"
Else
'rest of the page
End if
% >
好,下面開始從頭討論上面的程式碼。
首先,初始設定頁面,並讀取名字為KensSurvey的cookie值:
< %@ LANGUAGE="VBSCRIPT" % >
< %
Survey=Request.Cookies("KensSurvey")
然後,判斷是否已經存在cookie值:
If Survey ="" then
如果不存在, 就建立並設定cookie,並前往頁面survey.asp。 當下一次造訪時,因為存在cookie值,就不會再轉到
survey.asp 頁面。
Response.Cookies("KensSurvey")="x"
Response.Cookies("KensSurvey").Expires=#January 01, 2010#
Response.Redirect "survey.asp"
如果cookie已經存在,那麼訪客將執行頁面中剩餘的程式碼:
'rest of the page
End if
% >
例子2
這裡有另一個簡單的例子:當訪客第1次瀏覽某個網站時,向他們顯示歡迎訊息。程式碼如下:
< %@ LANGUAGE="VBSCRIPT" % >
< %
RequestName = Request.Form("Name")
RequestLeaveMeAlone = Request.Form("LeaveMeAlone")
If RequestName < >"" or RequestLeaveMeAlone < >"" then
Response.Cookies("MySiteVisitorName") = RequestName
Response.Cookies("MySiteVisitorName").Expires = #January 01, 2010#
Response.Cookies("MySiteLeaveMeAlone") = RequestLeaveMeAlone
Response.Cookies("MySiteLeaveMeAlone").Expires = #January 01, 2010#
End if
VisitorName = request.cookies("MySiteVisitorName")
LeaveMeAlone = request.cookies("MySiteLeaveMeAlone")
If VisitorName ="" and LeaveMeAlone ="" then
% >
< HTML > < HEAD > < /HEAD >
< body bgcolor="#ccffff" text="black" link="navy" vlink="purple" >
< DIV ALIGN="CENTER" >
< form action="index.asp" method="POST" >
< H2 >Let's be friends< /H2 >
What's your name (leave blank and hit the Submit button if you don't want us to
know)?
< input type="text" name="name" >< BR >< BR >
< input type="hidden" name="LeaveMeAlone" value="x" >
< input type="submit" value="Submit" >
< /FORM >
< /DIV >
< /BODY >
< %
End if
If VisitorName < > "" then
Response.write "Hi, " & VisitorName & "! I hope you are having a great day!"
End if
'rest of the page
% >
好,現在來看看上面的程式碼實作執行了什麼。首先,設定頁面。然後,檢查表單變數(在同一個頁面中)。如果表單變數存在,就建立cookie,並設定到期時間。
< %@ LANGUAGE="VBSCRIPT" % >
< %
RequestName = Request.Form("Name")
RequestLeaveMeAlone = Request.Form("LeaveMeAlone")
If RequestName < >"" or RequestLeaveMeAlone < >"" then
Response.Cookies("MySiteVisitorName") = RequestName
Response.Cookies("MySiteVisitorName").Expires = #January 01, 2010#
Response.Cookies("MySiteLeaveMeAlone") = RequestLeaveMeAlone
Response.Cookies("MySiteLeaveMeAlone").Expires = #January 01, 2010#
End if
接著,讀取cookie:
VisitorName = request.cookies("MySiteVisitorName")
LeaveMeAlone = request.cookies("MySiteLeaveMeAlone")
如果cookie在訪客的電腦上不存在,就建立表單,詢問相關資訊:
If VisitorName ="" and LeaveMeAlone ="" then
% >
< HTML >
< HEAD >
< /HEAD >
< body bgcolor="#ccffff" text="black" link="navy" vlink="purple" >
< DIV ALIGN="CENTER" >
< form action="index.asp" method="POST" >
< H2 >Let's be friends< /H2 >
What's your name (leave blank and hit the Submit button if you don't want us to
know)?
< input type="text" name="name" >< br >< br >
< input type="hidden" name="LeaveMeAlone" value="x" >
< input type="submit" value="Submit" >
< /FORM >
< /DIV >
< /BODY >
< %
End if
如果cookie已經存在,且使用者名字存在,就顯示給訪客一個歡迎介面,然後執行其餘的程式碼。
If VisitorName < > "" then
Response.write "Hi, " & VisitorName & "! I hope you are having a great day!"
End if
'rest of the page
% >
儘管上面的這個例子很簡單,但可以從中擴展許多富有創意的應用。你可以在表單中加入許多功能,以便客製化web網站。
你也可以讓訪客定製網站的色彩、字體,以至於其他web元素。有可能的話,你可以詢問訪客的生日,當訪客在那一天來訪時,你就可以顯示「生日快樂」的訊息給他。
如你所見,cookie的擴展性是無窮的,這篇文章只是拋磚引玉。