2010-09-28 137 views
3

我用ASP.NET 2.0創建了一個網站,我使用會話變量來確定用戶是否填寫了年齡驗證表單。一切都按預期工作(我可以讀取所有頁面上的會話變量),直到用戶轉到虛擬目錄。當他們這樣做時,頁面無法讀取會話變量。IIS,會話狀態和虛擬目錄

經過大量研究,我到目前爲止完成了以下工作。

  1. 開啓ASP.NET狀態服務
  2. 添加了一個節點的sessionState我的web.config文件中,改變模式爲StateServer(爲網站和虛擬目錄)。

    <的sessionState 模式= 「的StateServer」 無Cookie = 「假」 超時= 「20」 stateConnectionString這一= 「TCPIP = 127.0.0.1:42424」 />

  3. 生成新的machineKey並加入它無論是網站和虛擬目錄...

    <的machineKey
    的validationKey = 「... 128 ...」
    decryptionKey =」 .. 0.64 ......」 驗證=‘SHA1’ 解密=‘AES’ />

  4. 創建一個新的應用程序池,並確保這兩個網站和它的虛擬目錄都使用相同的應用程序池。

如果我寫出來的會話ID <%= Session.SessionId%>它是進出虛擬目錄(它是整個網站相同)的網頁一樣。我只是無法獲得該會話變量!有誰知道還有什麼我可以嘗試讓這個工作?

謝謝。

回答

1

不同的虛擬目錄=不同的應用程序和應用程序不共享它們之間的會話數據。也許重新設計你的應用程序來避免這種情況?

這是在ASP.NET應用程序之間共享會話數據的可能解決方案。

Passing session data between ASP.NET Applications

+0

我想過設置一個cookie而不是一個會話變量,因爲它都在同一個域名下,但它似乎應該有一個解決方案。我認爲會話狀態會起作用......爲什麼它對服務器場而言不起作用,而不是虛擬目錄? – Craig 2010-09-29 19:55:59

+0

@Craig - 我從來沒有與服務器農場合作過,但我認爲答案仍然是應用程序(virtural目錄)相同,只是位於不同的服務器上。 – DaveB 2010-09-29 23:45:56

0

從一切我可以說,這是不可能做我想做的事。更糟糕的是,我決定使用cookies而不是會話變量,認爲由於Cookie是由客戶端創建和維護的,並且基於域,所以這是行得通的。不幸的是,用C#/ ASP.NET創建的cookie甚至不能共享。所以我不得不使用C#來插入Javascript來創建cookie,以便我可以做我想做的事情。最終結果是一個簡單問題(恕我直言)的簡單解決方案。

+1

Cookie可以通過設置machineKey來共享 – 2013-03-31 18:41:22