2010-03-18 74 views

回答

2

您需要傳遞session-cookie,並在新域上重新設置該cookie。這將使會話在多個域中生效(假設您使用相同的應用程序)。

實施例:

從section1.com鏈接:

< A HREF =「http://www.section2.com/?S = askdjh3k4jh234kjh」 >

然後,OnSessionStart(或OnRequestStart)檢查查詢參數s和連接會話吧。意思,只是手動設置cookie的ASP.NET_SESSIONID給你傳遞的價值。

這有嚴重的安全隱患,所以除非你知道自己在做什麼,否則不要允許這樣做。另一種解決方案可能是將某些東西存儲到通用後端(數據庫?)中,並使用代表實際會話的令牌(和設置基於該標記的cookie),當您在離開section1.com時導航到中間頁面時生成該標記 - > transferusertonewdomain.aspx - > section2.com/?token=randomTokenThatMatchSessionInDatabase

這會阻止任何人通過知道cookie的價值來劫持會話。但是,如果你對計算機有點熟悉的話,那也不會少。

0

你可以使用cookie來傳遞它,仍然在研究如何找出答案。我會重新發布。

**編輯

還有另外一個堆棧溢出問題,看看是否有幫助,315132

它基本上問

我需要分享與兩個不同的域之間的SSO信息 cookie,可以這樣做在PHP和 如何?

給出的答案是

在這兩個領域,將圖像或從 其他域拉 其他網頁元素。使用 的URL通知域A上的用戶X爲 的其他域,並讓域B 將該用戶ID與其系統上的該用戶 相關聯。

正確執行 有點複雜,但如果你認爲它通過 它會工作得很好。

Vinko指出在評論 (謝謝!),我不應該把它 理所當然地認爲你瞭解所涉及的 安全隱患。如果這 信息的任何值給任何人的, 那麼你應該確保您使用 適當的加密,認證等 避免釋放敏感 信息,避免各種 攻擊(重播,中間人, 等) 。這不應該太過於繁瑣 既然您控制了這兩個網站,並且 您可以選擇一個安全密鑰 兩者,因爲通過這個 特殊URL通信僅在 兩個服務器之間。請記住它。

用戶是Adam Davis。

0

除非您進行一些自定義設置,否則會話特定於應用程序,無論您使用的會話模式如何。 Here's an article討論如何自定義SQL會話,以便您可以跨多個應用程序使用會話。

0

您應該首先將sessionState從「InProc」更改爲StateServer或SqlServer,確保所有站點(域和服務器)上的MachineKeys都相同,然後設置相關的後端系統以捕獲狀態信息。

更多信息,請訪問:

Session-State Modes

ASP.NET State Management Overview

+1

這不會自動允許跨域的會話。這是一個瀏覽器問題,它不會嘗試使用域之間的相同會話。然而,在stateserver或sqlserver中使用會話允許在應用程序之間或甚至多個web服務器之間共享會話。然而提交者正在使用相同的應用程序,所以InProc很好。 – jishi 2010-03-18 17:50:17

2

如果您有多個域(而不僅僅是子域,這是比較容易),你會這樣做比你想要的更復雜,因爲你不能在不同的域之間共享cookie。

通常的解決方法是在由asp.net頁面(或HttpHandler,如果你喜歡)提供的其他域上嵌入鏈接圖像。該頁面應該包含具有唯一標記的查詢字符串和該數據的哈希版本,並附加一些共享密鑰。然後,該頁面將在適合該域的響應上設置一個cookie,以將自己與適當的數據關聯起來。它通常會提供1x1的透明圖像作爲響應。通常,您只需在登錄到其中一個網站時執行此操作。

相關問題