Asp中如何設計跨越域的Cookie

發表于:2007-09-07來源:作者:點擊數: 標簽:
Cookie簡介 首先,我們對Cookie做一個簡單的介紹,說明如何利用ASP來維護cookie。 Cookie是存儲在客戶端計算機中的一個小文件,這就意味著每當一個用戶訪問你的站點,你就可以秘密地在它的硬盤上放置一個包含有關信息的文件。這個文件幾乎可以包含任何你打算
  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"amp;"?checked=True")

  Else

  '獲取username

  strUsername=Request.Cookies("SiteB_Cookie")("Username")

  '將用戶連同一個特殊的標志返回到siteA.com

  Response.Redlrect("http://www.siteA.com/index.asp"amp;"?checked=True"amp;"identrfer="amp;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

  最后,我們回到siteA.com。文件的第一部分(l-l)檢查是否完成了cookie的檢查,由于可以明顯地知道已經完成(由語句中的"checked"參數表明),進行到l—3所示的程序的第二部分。如果存在特殊的標志,我們就可以在siteA.com創建cookie。使用這個特殊的標志(在這里是username),我們可以在任何需要的時候查詢數據庫。然后,設置cookie,顯示頁面的其他部分。如果沒有指定的標志,也沒必要擔心,只要簡單地顯示頁面的余下部分。

  這樣,毫不費力地,siteA.com擁有了和siteB.com一樣的cookie。我們可以傳輸更多的信息而不只是一個標志,并且,將網絡流量控制在最小范圍內。

  要注意一點,即使用戶擁有siteA.com上的cookie,仍需要檢查siteB.com。通常來講,這不是必須的,也會節約時間。但是,一旦用戶在siteB.com更改個人信息?這樣做,會保持所有信息的同步。

  Cookie環

  要完成這些,我們需要兩個文件:一個在原始站點服務器(siteA.com),完成檢查;一個在參考服務器(siteB.com),驗證用戶。如果有一臺參考服務器包含有需要的所有用戶信息或cookie,就可以增加隨意多的原始服務器,所需要做的就是在所有要共享cookie的服務器上增加cookie.inc文件。

  也可以以相反的次序執行,例如,如果siteB.com是原始服務器,而siteA.com包含用戶信息。訪問過siteA.com卻從未訪問過siteB.com的用戶也可以登錄到siteA.com,并且擁有所有的曾經的設置。注意,如果擁有多個參考服務器,這樣將會很使人迷惑,并且消耗過多的資源,因為必須將用戶重定向到每一臺參考服務器。

  理論上講,可以擁有一個所有站點都共享相同的用戶的網絡。最可行的方案就是建立共享cookie環。將參考服務器列表存儲在一個地方(備份服務器),以便每個參考服務器可以查找并決定重定向用戶的下一個站點。記住一定要通過查詢字符串的意思跟蹤用戶是在哪個原始服務器開始。這樣信息的傳輸非常迅速,這個環節變得越來越可行。

  這里還存在一些問題,首先是反應時間。對用戶而言,他們最好不知道過程是怎樣的。他所需的時間依賴于siteA.com、siteB.com之間的連接,有可能會比較長,在實現cookie環時可能會更長。

  再一個主要問題,就是每一個實現者大都會面對無限的重定向。這有很多原因,例如:用戶的測覽器不支持cookie。這就需要再設計代碼來監測用戶瀏覽器的性能。

  最好,還需要注意安全問題。如果有些黑客發現了其中的訣竅,他可能會得到cookie中的信息。最簡單的防范辦法就是保護參考服務器,只允許原始服務器訪問Cookie.asp文件。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97