簡體   English   中英

在兩個ASP.NET應用程序之間共享會話,其中一個嵌套在另一個ASP.NET應用程序中

[英]Sharing session between two ASP.NET applications, where one is nested within the other

那么,在你問“你的意思是什么之后,一個嵌套在另一個之內?” 我會盡可能簡單地解釋一下。

存在.NET Web應用程序(A)。 構建了一個補充應用程序(B),它可以處理幾個相同的核心組件。 之前的一家咨詢公司以某種方式應用程序A中“安裝”了應用程序B 以便B可以背負A的會話。 所以,像這樣:

- Application A (C:\Inetpub\wwwroot\ApplicationA)
    + Application B (C:\Inetpub\wwwroot\ApplicationA\sup\ApplicationB

之前的公司沒有留下關於他們如何或為什么這樣做的文檔,但它對他們有用。 我現在面臨的困境是:應用程序A升級,使B無用。 我更新了B來運行A提供的新核心,但是當我完成時,另一個團隊已經摧毀了之前的生產和測試服務器,我無法獲得備份以查看它是如何配置的。

經過一系列的改進后,我能夠通過切斷B的web.config文件並刪除重復的部分 - 在A的web.config中已存在的部分,在單個IIS應用程序和池中復制上面的層次結構。 我還將B的bin文件夾中的所有文件轉儲到A的bin文件夾中。

兩個站點都編譯並由IIS提供服務,但我無法使用此結構從A的會話中讀取任何內容。 我對這個結果並不感到驚訝,但我需要找到一個解決方法。 簡而言之,A有一個存儲在其會話中的sessionID,我需要用它來獲取B中的數據源,因為A的創建者施加了一些瘋狂的許可規則(sessionID需要傳遞給其核心API中的每個函數)用戶授權)。

關於為什么功能不再有效的任何想法(假設我已經正確地復制了舊環境),或者我如何解決它? 移動到SQL服務器以獲取會話狀態不是一個選項 - 我無法更改有關應用程序A的任何內容。

我看了一下A的代碼(就像我敢用Reflector一樣),我試圖從會話中檢索的變量仍在那里並被使用。

任何想法都會很棒!

由於它們是兩個獨立的應用程序,因此它們(顯然)具有兩個不同的會話范圍。 您可以在一個會話而不是另一個會話中,A中的會話可以在B中的會話之前到期,強制A在B仍在使用舊會話時創建會話。 沒有任何東西將A鏈接到B,反之亦然,所以邏輯上沒有直接的方式它們甚至可以共享對象,因為它們之間沒有任何有意義的相關性。

缺點是 - 您不能(輕松)直接在兩個不同的應用程序之間共享會話數據。 此問題的常見解決方案是通過查詢字符串或cookie(如果它們位於同一域中)在兩個應用程序之間傳遞公共ID,並且都使用該ID引用它們都可以訪問的數據庫中的公共記錄。 從那時起,可以通過數據庫共享信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM