Asp中如何設計跨越域的Cookie

2022-01-16 02:04:53 字數 4178 閱讀 8306

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("

") 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(""&"?checked=true

") else

'獲取username

strusername=request.cookies("siteb_cookie")("username")

'將使用者連同乙個特殊的標誌返回到sitea.com

response.redlrect(""&"?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

最後,我們回到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檔案。

ASP中是如何使用儲存過程的!

建立儲存過程 create procedure select forum asselect from forum goxx.aspx page language vb import namespace system.data import namespace system.data.sql dim ...

asp中如何獲得客戶端的IP

在 asp 中使用 request.servervariables remote addr 來取得客戶端的 ip 位址,但如果客戶端是使用 服務 器來訪問,那取到的就是 伺服器的 ip 位址,而不是真正的客戶端 ip 位址。要想透過 伺服器取得客戶端的真實 ip 位址,就要使用 request.se...

ASP中的REPLACE函式如何不區分大小寫

函式 replace 功能 在字串中查詢,替代指定的字串.格式 replace strtobesearched,strsearchfor,strreplacewith start count compare 引數 strtobesearched是字串 strsearchfor是被查詢的子字串 str...