2013-10-17 12 views
1

我想問一下Cache對象的奇怪行爲。我使用Cache以SessionID作爲關鍵字存儲特定於用戶的數據(更準確地說,用於會話)。緩存包含子域的不同數據

由於某些原因,緩存中的數據對於不同的子域看起來並不相同。我設法讓SessionID在所有子域中保持相同: - 我在web config中的httpCookies元素中設置了域屬性,如「.domain.com」。 - 我使用this技巧來確保SessionID cookie存儲在所有子域中。 - 我將sessionState模式設置爲SQLServer。

我確保SessionID對於所有子域名都是相同的。更有意思的是,當我使用會話狀態代替緩存時,一切正常。會話返回所有子域的預期數據。但是當我使用SessionID作爲關鍵字的緩存時,緩存爲不同的子域返回不同的數據。

當然,我可以將它保持在會話狀態,但我不是很喜歡它,並儘量避免它,只要我可以。

任何想法,將不勝感激。

+1

如果你底層的緩存是HttpRuntimeCache,還有每個進程的一個(即每個應用程序池) 。這是一個主機頭站點在單個應用程序池中的單個服務器上運行嗎?如果不是,則有多個HttpRuntimeCache實例。 – Jamey

+0

所有子域指向相同的IP。我想這是同一個應用程序池。 – MrHenkey

回答

0

更重要的是,有趣的是,當我使用緩存中的會話狀態 時,一切正常。

它的工作原理是因爲您將SessionState存儲在SQLServer的集中位置。

The Cache for the current application domain.

如果要對所有應用程序域相同的緩存,你需要分佈式緩存爲的Windows Server這樣的AppFabric

+0

我忘了說所有的子域名都是同一個應用程序。我的意思是所有的子域指向一個IP。應用程序域不應該一樣嗎? – MrHenkey