2010-09-24 48 views
3

是否有一個適當的.NET解決方案用於在多個域上提供持久服務器會話?通過多個域進行ASP.NET會話

即如果一個網站的用戶下www.site1.com登錄時,他們也會然後記錄下www.site2.com

安全是我們工作的程序的問題.. 。

謝謝!

+0

相同的應用程序,相同的服務器?完全不同的域名或只是一個不同的子域名? – 2010-09-24 15:58:43

+0

如果我記得所有解決方案都涉及SQL Server和sprocs/tables,那麼會話與域/應用程序綁定。 – Lloyd 2010-09-24 16:01:38

+0

爲什麼人們不斷試圖爲此做黑客攻擊?只需創建一箇中介「第三」服務器,您可以在一個地方處理單點登錄。即site1重定向到site3(auth)上的頁面,登錄並重定向回站點。然後,如果該用戶轉到site2,它將檢查site3(auth)是否有會話,如果他們這樣做,則將它們登錄。Session存儲在site3上。就像OAuth的工作方式一樣。那有什麼問題? – RPM1984 2010-09-24 23:38:43

回答

0

嘗試使用IIS 7.5 URL的正規主機名的URL重寫功能重寫2模塊:Download

(這個答案依賴於這兩個網址都爲同一個Web應用程序hostheader項)

1

你可能想在這裏,而不是開始入侵到ASPState的數據庫(可能的,但我不建議這樣做):http://www.codeproject.com/KB/session/sharedsession.aspx

基本上您使用反射設置AppDomain對於www.site1.com & www.site2.com是相同的。

你也可能也需要AppPath,我們需要,但我們的設置與你有什麼不同。我們添加了:

 FieldInfo appDomainInfo = typeof(HttpRuntime).GetField("_appDomainId", BindingFlags.Instance | BindingFlags.NonPublic); 
     appDomainInfo.SetValue(theRuntime, "/LM/W3SVC/1/ROOT/A_Website_Name_Here"); 
1

'會話'這個詞在ASP.NET中可能有點令人困惑。

如果您正在談論安全性(身份驗證和授權),您可能正在尋找一種單點登錄解決方案。換句話說,當用戶登錄到一個站點時,他們不會被提示登錄到其他相關站點。看看Windows Identity Foundation,OAuth,Jasig CAS。 CAS是我的首選解決方案(我是.NET客戶端的開發人員),但服務器是用Java編寫的,您需要Java方面的一些專業知識才能以您想要的方式進行配置。

在ASP.NET中,會話狀態是與身份驗證和授權完全分離的組件(儘管它可能取決於身份驗證步驟的結果)。如果您試圖在兩個站點(即購物車內容)之間共享信息,則可以將兩個域都配置爲使用與會話提供程序(谷歌aspnet_regsql -ssadd)相同的數據庫,或者您可以將數據存儲在數據庫中兩者都可以訪問。

有關爲什麼我要強調的區別更多信息,檢查了這一點:http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

好運。