Cookie簡介
首先,我們對Cookie做一個簡單的介紹,說明如何利用ASP來維護cookie。
Cookie是儲存在用戶端電腦中的一個小檔案,這就意味著每當一個使用者訪問你的網站,你就可以秘密地在它的硬碟上放置一個包含有關資訊的檔案。這個檔案幾乎可以包含任何你打算設定的資訊,包括使用者資訊、網站狀態等等。這樣的話,就有一個潛在的危險:這些資訊有可能被駭客讀取。為了防止這個問題的發生,一個有效辦法就是cookie只能被建立它的域所存取。這就是說:比如ytu.edu.cn只能訪問ytu.edu.cn建立的cookie。通常來講,這沒有什麼問題;但是,如果需要兩個不同域上的兩個不同網站共用儲存在cookie中的使用者資訊,該如何處理呢?當然可以選擇複製使用者信,但是,如果你需要使用者只能在一個網站上註冊,並且自東成為另外一個網站的註冊使用者呢?或者,兩個網站共用一個使用者資料庫,而又需要使用者自動登入呢?這時候,跨越域共用cookie是最好的解決方案。
這裡,先看一些ASP處理cookie的代碼,以便以後便於引用參考。
'建立Cookie
Response.Cookies("MyCookie").Expires=Date+365
Response.Cookies("MyCookle").Domain="mydomaln.com"
Response.Cookies("MyCookle")("Username")=strUsername
Response.Cookies("MyCookle")("Password")=strPassword
讀寫cookie非常簡單,上面的代碼建立一個cookie並給cookie設定屬性:域、到期時間,以及其他一些儲存在cookie中的值。這裡,strUsename,strPassword是在前面某個地方設定的變數。然後,通過下面的語句在cookie中讀取。
'讀取Cookie
datExpDate=Request.Cookies("MyCookie")
strDomaln=Request.Cookies("MyCookle").Domain
strUsername=Request.Cookies("MyCookle")("Username")
strPassword=Request.Cookies("MyCookie")("Password")
更詳細的資訊,可以參考ASP的資料。
實現
簡單地共用cookie的訣竅是重新導向,一般過程為:
1.一個使用者點擊siteA.com。
2.如果使用者沒有siteA.com的cookie,就把使用者重新導向到siteB.com。
3.如果使用者有siteB.com的cookie,把使用者連同一個特殊的標誌(將在下面解釋)重新導向回siteA.com,否則,只把使用者重新導向到siteA.com。
4.在siteA.com建立cookie。
看起來很簡單,仔細分析一下:siteA.com和siteB.com共用相同的使用者佈建,所以,如果使用者有siteB.com的cookie(已經註冊),siteA.com能夠同樣讀取cookie、提供cookie所允許的特性。這樣,訪問siteA.com的使用者就如同訪問了siteB.com。
這個檢查的環節應該在siteA.com中的檔案所包含一個cookies.inc中實現。讓我們看一下這段代碼:
l—1
'SiteA.com"檢查cookie
If Request.Querystring("Checked")<>"True" then
If not Request.Cookies("SiteA_Cookie").Haskeys then
'重走向到siteB.com
Response.Redlrect("http://www.siteB.com/cookie.asp")
End if
End if
如果使用者有一個siteA.com的cookie,則不需要做任何事情了;第一個if語句用來消除無限的迴圈。讓我們看一下siteB.com上的cookie.asp檔案來獲得進一步的理解。
1—2
'SiteB.com
'檢查cookie
If not Request.Cookies("SlteB_Cookle").Haskeys then
'重新導向到 siteA.com
Response.Redirect("http://www.siteA.com/index.asp"&"?checked=True")
Else
'擷取username
strUsername=Request.Cookies("SiteB_Cookie")("Username")
'將使用者連同一個特殊的標誌返回到siteA.com
Response.Redlrect("http://www.siteA.com/index.asp"&"?checked=True"&"identrfer="&strUsername)
End if
如果使用者在siteB.com上仍沒有cookie,於是,將他送回到siteA.com,並且通過在查詢語句中提供一個叫做"checkd"的參數讓應用程式知道你已經檢查過cookie了。否則,將使用者送回到siteB.com,並退出迴圈
然而,如果使用者擁有siteB.com的cookie,我們需要將使用者送回siteA.com並告訴siteA.com。為此,我們在資料庫中附加一個唯一的標誌,username。所以,我們擴充siteA.com中的代碼。
l—3
'SiteA.com
...
...
'檢查標誌
If Request.Querystring("identifier")<>"" then
strUsername=Request.Querystring("identifier")
'記錄到資料庫
Response.Cookies("siteA_Cookie").Expires=Date+365
Response.Cookies("SiteA_Cookie").Domain="siteA.com"
Response.Cookies("siteA_Cookie")("Username")=strUsername
End if