2014-02-18 231 views
4

enter image description hereASP.Net會話變量 - 設置會話變量,然後重定向

上述簡化了我的情況,但更強調我的困境 - 偶爾我的用戶是無法(會話超時之前好)來訪問他們的會話變量。我的配置如下:

  • 應用是.NET Framework 3.5的
  • 會話狀態由的StateServer處理(Web服務器上本地運行)的Web服務器上運行
  • 的StateServer服務是.NET框架4.0
  • 只有一個Web服務器,它不是一個農場或花園的情況

我控制的那臺sessio流有一個頁面n變量到一個自定義用戶對象的實例(如果我將二進制序列化到文件系統的對象,它們的大小可以在6kb到30kb之間,所以不是很小但不是很大)。該應用程序通常最多隻能同時擁有10個用戶。控制流中的後續頁面檢查會話變量是否爲空。如果會話變量爲空,則假定會話超時並且用戶被重定向到「丟失的會話」頁面。爲了進行調試,我放置了另一個對丟失會話頁面中相同會話對象的檢查。

我在日誌中看到的內容非常奇怪 - 用戶正在被髮送到丟失的會話頁面,但該對象確實存在於會話中!會話變量可能在PageTwo.aspx上爲null,但在LostSession.aspx上不爲null?是否有可能PageTwo.aspx運行得太快 - 意味着對象尚未完全「寫入」Session StateServer?

關於如何進一步調試的任何想法?

+1

瀏覽器特定的cookie問題,如IOS和IFrame內導航?當它發生時獲取Fiddler跟蹤並查看是否有錯誤發生在cookie上。 –

+0

@AlexeiLevenkov - 這是一個很好的想法。我對Web服務器的訪問權限有限,但我會請求設置一天左右的跟蹤以查看是否可以捕獲它發生的事情。我記錄每個請求以及SessionID,我可以看到ID在所有三個請求中是一致的 - 這是否意味着cookie是好的或不一定? – mikey

+0

如果您在服務器端的跟蹤中看到相同的會話ID比cookies好...沒有其他想法:( –

回答

0

由於用戶對象存在於LostSession中,它也應該存在於PageTwo中。由於您使用重定向,所以數據訪問過早不應該存在問題。

您可以嘗試在分配用戶對象的行上的PageTwo中設置檢查點,並手動查看會話對象。將它與PageOne和LostSession進行比較可能會給你一個線索是什麼導致你的問題。

該鍵可能包含拼寫錯誤,因此用戶對象設置爲空,因爲引用的鍵在會話中沒有對象。

+0

謝謝@Will,「第2頁」的代碼中沒有錯別字。通過調試器運行它總是會產生預期的結果。在生產中運行時,它也可以運行99次。只有偶爾在生產環境中運行時纔會出現此問題。我將日誌記錄添加到每個頁面以確認行爲。這與會話狀態應該有效的文檔/預期方式相反。當時間允許時,我正在考慮添加一個try/catch和一個簡短的睡眠,以便在幾秒鐘後再次嘗試。如果它仍然存在,我可能會重建服務器並再次監視它。 – mikey