2009-10-07 60 views
4

我需要知道如何訪問由另一個Web應用程序中的一個網站或Web應用程序設置的會話。如何在兩個網站訪問相同的會話?

例如我已經登錄gmail.com在Firefox選項卡,然後我在一個不同的選項卡中打開orkut.com,在這裏我沒有登錄。

我需要訪問或共享相同的用戶會話在ASP.Net中的兩個不同的Web應用程序中。

+0

請記住,我們的應用程序中通常存在兩個會話概念(當然,使用ASP.net,因爲您標記了這個概念)。身份驗證會話通常由ASP.NET中的FormsAuth cookie覆蓋,然後維護會話數據的會話。他們通常是獨立的。 – UpTheCreek 2009-10-21 11:52:28

+0

究竟需要共享什麼?你是否試圖在用戶名之外分享一些會話狀態,所以如果我在一個應用程序中做了一些其他應用程序知道的事情,那就是從情境狀態? – 2009-10-22 17:43:14

+0

我想分享登錄用戶的ID,密碼或任何驗證細節。 – Himadri 2009-10-23 13:34:01

回答

7

出於良好的安全原因,您無法通過內置的asp.net會話跨越應用程序域。

您正在尋找的是系統上的單點登錄。這意味着你只需登錄一次,但是如果在不同的應用之間切換,你可能不得不從數據庫重新加載該應用的會話。這可以通過登錄時的身份來完成。

4

除非您的應用程序共享相同的域名(例如,在example.com上,或者在a.example.com上,或者在b.example.com上另一個域名),否則Cookie不會對您有所幫助。您需要一些可供您的應用程序訪問的會話存儲空間,例如在兩個都有權訪問的數據庫中(例如,這就是stackoverflow.com和serverfault.com的做法)。

但是,您需要以某種方式查明,網站A上的哪個用戶帳戶/會話對應於網站B上的同一帳戶;您只需要執行一次操作(繼續執行SO「associate your accounts」)。

3

您不能從完全不同的服務器訪問相同的「會話」。

從你所描述的你只需要使用相同的登錄名,例如你不想再提供你的憑證。正如鴿子回答,這是用Single Sign On解決方案完成的。維基百科文章包含很多有用的鏈接。

通常情況下,您使用第三方服務(您也可以自己提供服務,您不需要任何人爲此服務)以及不同服務器之間的一些重定向,以便獲得用戶身份的某種認證。

基本上OpenID,例如,在這裏用於stackoverflow,是解決同樣的問題,雖然你通常沒有隱式登錄 - 你需要明確登錄。

如果你控制兩個參與服務器以及身份驗證「第三方」(實際上這可能是兩臺服務器之一的一部分),您應該可以輕鬆提供一些隱式登錄。

但是,如果網站顯然不屬於一起,請注意可能存在的隱私問題。如果您不認識到兩臺服務器屬於同一個實體,則主動共享其身份,則人們可能會感到疏遠。

1

爲了達到你所追求的效果,你將無法通過會話來完成,因爲每個會話都是相互獨立的,不能從另一個會話訪問資源。正如其他人所說,最接近你可以使用的是像OpenID這樣的認證系統。

DotNetOpenAuth是一個很好的開始尋找如何爲ASP.NET項目實現這種系統的例子。

相關問題