熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

Asp中如何設計跨越域Cookie

2013-11-13 09:45:05  來源: .NET編程 

  Cookie簡介

  首先我們對Cookie做一個簡單的介紹說明如何利用ASP來維護cookie

  Cookie是存儲在客戶端計算機中的一個小文件這就意味著每當一個用戶訪問你的站點你就可以秘密地在它的硬盤上放置一個包含有關信息的文件這個文件幾乎可以包含任何你打算設置的信息包括用戶信息站點狀態等等這樣的話就有一個潛在的危險這些信息有可能被黑客讀取為了防止這個問題的發生一個有效的辦法就是cookie只能被創建它的域所存取這就是說比如只能訪問創建的cookie通常來講這沒有什麼問題但是如果需要兩個不同域上的兩個不同站點共享保存在cookie中的用戶信息該如何處理呢?當然可以選擇復制用戶信但是如果你需要用戶只能在一個站點上注冊並且自東成為另外一個站點的注冊用戶呢?或者兩個站點共享一個用戶數據庫而又需要用戶自動登錄呢?這時候跨越域共享cookie是最好的解決方案

  這裡先看一些ASP處理cookie的代碼以便以後便於引用參考

  創建Cookie
  ResponseCookies(MyCookie)Expires=Date+
  ResponseCookies(MyCookle)Domain=
  ResponseCookies(MyCookle)(Username)=strUsername
  ResponseCookies(MyCookle)(Password)=strPassword

  讀寫cookie非常簡單上面的代碼創建一個cookie並給cookie設置屬性過期時間以及其他一些保存在cookie中的值這裡strUsenamestrPassword是在前面某個地方設置的變量然後通過下面的語句在cookie中讀取

  讀取Cookie
  datExpDate=RequestCookies(MyCookie)
  strDomaln=RequestCookies(MyCookle)Domain
  strUsername=RequestCookies(MyCookle)(Username)
  strPassword=RequestCookies(MyCookie)(Password)

    更詳細的信息可以參考ASP的資料

  實現

  簡單地共享cookie的訣竅是重定向一般過程為

  一個用戶點擊

  如果用戶沒有的cookie就把用戶重定向到

  如果用戶有的cookie把用戶連同一個特殊的標志(將在下面解釋)重定向回否則只把用戶重定向到

  在創建cookie

  看起來很簡單仔細分析一下和共享相同的用戶設置所以如果用戶有的cookie(已經注冊)能夠同樣讀取cookie提供cookie所允許的特性這樣訪問的用戶就如同訪問了

  這個檢查的環節應該在中的文件所包含一個cookiesinc中實現讓我們看一下這段代碼

l—
  檢查cookie
  If RequestQuerystring(Checked)<>True then
  If not RequestCookies(SiteA_Cookie)Haskeys then
  重走向到
  ResponseRedlrect()
  End if
  End if

    如果用戶有一個的cookie則不需要做任何事情了第一個if語句用來消除無限的循環讓我們看一下上的cookieasp文件來獲得進一步的理解

  
  
  檢查cookie
  If not RequestCookies(SlteB_Cookle)Haskeys then
  重定向到
  ResponseRedirect(&?checked=True)
  Else
  獲取username
  strUsername=RequestCookies(SiteB_Cookie)(Username)
  將用戶連同一個特殊的標志返回到
  ResponseRedlrect(&?checked=True&identrfer=&strUsername)
  End if

    如果用戶在上仍沒有cookie於是將他送回到並且通過在查詢語句中提供一個叫做checkd的參數讓應用程序知道你已經檢查過cookie了否則將用戶送回到並退出循環

  然而如果用戶擁有的cookie我們需要將用戶送回並告訴為此我們在數據庫中附加一個唯一的標志username所以我們擴展中的代碼

  l—
  

  
  
  檢查標志
  If RequestQuerystring(identifier)<> then
  strUsername=RequestQuerystring(identifier)
  記錄到數據庫
  ResponseCookies(siteA_Cookie)Expires=Date+
  ResponseCookies(SiteA_Cookie)Domain=
  ResponseCookies(siteA_Cookie)(Username)=strUsername
  End if

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

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

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

  Cookie環

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

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

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

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

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

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


From:http://tw.wingwit.com/Article/program/net/201311/11491.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.