session用法 - 我怎樣才能在ASP.NET中的多個子域共享一個會話?



iis (4)

如果你使用的是PHP,那麼一個小技巧就是做一些腳本(或者兩個)來完成下面的工作:

1序列化$ _SESSION數組2將該字符串作為隱藏輸入傳遞,使用POST將所有到這些按鈕的鏈接以單獨的形式顯示出來。 3還包括一個布爾隱藏的輸入,讓您的腳本知道是否需要使用當前會話或反序列化$ _POST ['會話'] 4在您的網站部署此,在適當的地方

如果實際上有一個被批准的方式轉移會話,我不會這樣做。 我希望你至少已經考慮過使用cookies。

我有一個應用程序,在使用應用程序的過程中,用戶可以點擊

virginia.usa.com

newyork.usa.com

由於我寧願不創建一個新的會話,每次用戶從一個子域跨越到另一個,有什麼好辦法跨多個子域共享會話信息?


Answer #1

我不認為不同的子域本身會強制不同的會話。 您提供的兩個URL都可以指向IIS中的相同應用程序。

這聽起來像是你有不同的服務器或至少IIS中的每個子域不同的網站。 存儲這種持久狀態的最好方法是在一個中央數據庫中。 我發現ASP.NET中的Profile服務對於這個目的非常有用。

希望有所幫助。


Answer #2

你用ASP.NET和IIS標記了這個,所以我會認為這是你的環境。 確保你的web.config中有這個:

<httpCookies domain=".usa.com"/>

如果你的2個子域映射到同一個應用程序,那麼你就完成了。 但是,如果它們是不同的應用程序,則需要執行一些額外的工作,例如使用基於SQL Server的會話存儲(並竊聽存儲過程以確保所有應用程序共享相同的會話數據),或使用HttpModule攔截應用程序名稱,因為即使使用共享cookie和相同的機器密鑰,2個應用程序仍然使用2個不同的商店來存儲會話數據。


Answer #3

馬特的答案絕對是如果你有多個子域指向同一個IIS應用程序(這正是我現在的情況,使用通配符DNS,然後在接收端做子域'嗅探')的路要走。

不過,我想添加一些我曾經遇到過的情況,以防有人發現這不適合他們。 單獨設置httpCookies行沒有為我做,我不得不添加一個machineKey條目到我的web.config文件:

machineKey decryptionKey =“12 ... D1”validationKey =“D7..8B”

特別奇怪,因為我不是在網上農場設置(除非AWS / EC2是有效地這樣做)..只要我這樣做,它就像一個冠軍。