2009-06-02 116 views
11

雖然我意識到這通常與跨站點腳本攻擊有關,但我想知道的是會話如何在屬於單個域的多個子域中保持有效(例如:用戶僅登錄一次,並且能夠使用同一會話訪問subdomain1.domain.com和subdomain2.domain.com)。我想我首先需要了解它是如何工作的,但到目前爲止,我還沒有找到太多與此相關的東西。跨域Cookie訪問(或會話)

但是再次,也許我沒有問正確的問題。

感謝提前:)

回答

0

您可以爲特定的域設置cookie。

在php中,setCookie()方法包含一個參數,您可以在其中指定頂級域,因此該cookie對所有子域均有效。根據你的標籤,我看到你在asp.net工作。這大概也存在ASP ...

對於ASP小的搜索後:

試試這個:

Response.Cookies("CookieName").Domain = ".mydomain.com" 

或閱讀this

+0

看標籤的伴侶。 – Shoban 2009-06-02 12:42:52

+1

euhm,我沒有...否則,我不會寫'基於你的標籤'... – Fortega 2009-06-02 12:46:52

18

INPROC會話不能保持有效,但是你可以編寫您的Web應用程序以允許跨多個子域的Cookie。您將需要設置等於域:

Response.Cookies("CookieName").Domain = ".mydomain.com" 

Remember the period.

2

默認情況下,網站的所有cookie在客戶端上存儲在一起,和所有Cookie與任何請求發送到服務器現場。換句話說,網站中的每個頁面都會獲取該網站的所有Cookie。餅乾的範圍

  1. 限制到服務器上的文件夾,它可以讓你的Cookie限制到站點上的應用程序:但是,您可以設置Cookie的範圍在兩個方面。
  2. 將範圍設置爲域,該域允許您指定域中的哪些子域可以訪問cookie。

您可以瞭解更多here

1

有關爲域設置的cookie的評論允許子域接收該cookie會給你方,但缺少的是會話的一致性。

我認爲這非常類似於在服務器場中的服務器之間維護狀態的問題,並且解決方案可能確保您的會話存儲在兩個站點之間保持一致(如果它們不是來自同一'網站'在IIS中)。您可以將會話存儲移動到SQL Server(HOW TO: Configure SQL Server to Store ASP.NET Session State)中,這可能有助於實現這一目的,因爲每個站點在查找與其提供的cookie相關的會話數據時都會查詢同一商店。

我希望能讓你走上正軌。

6

有很多方法可以跨域共享會話數據或cookie數據。最簡單的方法是通過共享數據存儲在服務器端共享它。但是如果這麼簡單,你不會問這個問題。

另一種做這件事的方法同樣簡單。域one.com包含一些會話數據,如name=aleemid=123,並希望將其傳遞給two.com。它會遵循以下步驟:

  1. 撥打電話到two.com/api/?name=aleem&id=123
  2. two.com通過查詢參數得到的數據,創建一個與數據的cookie。這個cookie將被存儲在two.com域名下。
  3. two.com然後將重定向到在這種情況下發生的REFERERone.com

這是一個簡單的場景。域two.com需要能夠信任one.com而不僅僅是,但它需要知道該請求是真實的,而不僅僅是由用戶精心製作的,所以您需要使用公鑰/私鑰來緩解這個問題。

1

如果你必須建立一個共同的子域的能力,你可以這樣做:

在您的子域的html文件,包括在頂部像這樣的JavaScript文件:

<script src="http: //common.domain.com/check.asp"></script> 

在檢查.asp的,尋找你LOGGED_IN的cookie,如果不存在,顯示頁說,http://common.domain.com/login.asp使用類似

<% 
if (cookie_not_found){ 
%> 
location.href = "http: //common.domain.com/login.asp"; 
<% 
} 
%> 

一旦一個人提交的用戶名密碼,提交它返回到相同的login.asp並設置會話cookie(將在common.domain.com域中設置),然後重定向到http://subdomain1.domain.com

現在會發生的是,將調用嵌入的「common.domain.com/check.asp」,common.domain.com的cookie將隨瀏覽器一起發送請求。所以你會知道你的會話是否有效,即使你在subdomain1.domain.com。