2009-08-12 28 views
0

已解決問題! ASP.NET會話立即過期。在我的web.config我有這個會話設置:
ASP.NET會話很快到期了嗎?

<sessionState mode="InProc" timeout="10000" /> 

AFAIK超時屬性的值是minutes,不能大於525600分鐘(1年)。我不明白我在這裏做錯了什麼。爲什麼會話過期。這是服務器內存問題嗎?我不這麼認爲,服務器非常流行,並且只有一個站點沒有太多的工作。想法?
編輯:
的cookiless屬性設置爲true,同時注意到在URL中的會話ID,我可以看到會話ID CHANGING後。我認爲這意味着會議即將到期。 IIS設置是正確的AFAIK(啓用會話狀態複選框被選中,時間值爲20)。一張圖片勝過100個字:

alt text http://img148.imageshack.us/img148/5053/sessionstate.jpg

+0

需要更多的信息。你爲什麼說會議過期了?如果你在一個頁面上設置一個會話變量並嘗試在另一個頁面上顯示它,那麼它是否爲空?或者使用像fiddler(fiddlertool.com)這樣的東西,你看到會話cookie變化了嗎? – gjutras 2009-08-12 12:48:50

+0

不,我的一個隊友正在設置一個包含登錄用戶信息的會話變量。 – Galilyou 2009-08-12 13:22:42

回答

0

原來是我們的團隊成員之一的失誤,他被設定爲INPROC雖然該網站與負載均衡分配4臺物理機的會話。我不確定這是否是問題,但是當我改變它以將會話存儲在SQL服務器中時,它工作正常!將深入探討這個問題並報告我可能得到的任何進一步信息。謝謝你們所有的人!

+0

這是因爲默認情況下會話保存在提供請求的框中。如果您的負載均衡器後面有4臺機器,則有人可能會向A提出請求,此時會爲該用戶提供會話數據。然而,如果下一個請求是由於負載均衡器而從B框提供的,則框B將無法知道框A上的會話信息。這就是爲什麼切換到sql server模式解決了您的問題 - 因爲所有4臺機器都是從相同的位置共享會話。 – 2013-11-12 17:39:18

1

也許你的瀏覽器不正確地存儲cookie。嘗試將會話設置爲cookieless模式,然後重試。

<sessionState mode="InProc" timeout="10000" cookieless="true" /> 
+0

我不認爲這是一個瀏覽器問題,我嘗試了FF和Chrome! – Galilyou 2009-08-12 12:48:39

+0

也許這是IIS cookies處理問題。它嘗試'無cookie'的方法不會傷害。 – RaYell 2009-08-12 15:38:10

0

您需要確保會話已啓用IIS以及web.config中。

而且,這是值得把一些日誌上的應用程序重新啓動。您可能還有其他問題導致整個應用程序重置。

+0

hmm ..不知道有關IIS設置..將檢查! – Galilyou 2009-08-12 12:49:13

+0

檢查IIS設置,問題已相應更新! – Galilyou 2009-08-13 05:17:51

0

我過這種情況與頁面一次。事實證明,我正在做一個Session.Abandon()的地方,我沒有意識到在執行序列中調用了它(它與登錄和我使用成員資格提供程序的方式有關)。作爲一個調試技巧,我會建議在每個Session.Abandon()上放置一個斷點,並確保在你不期望它時調用它。

+0

好吧,我在同一臺機器上創建了一個空白的新應用程序,點擊時只有一個按鈕會爲會話保存一個值。直到過期的會話。 – Galilyou 2009-08-12 12:52:12

0

這發生在我身上了幾次與主要元兇一直。

有人更新的Web應用程序使它重新開始一個文件,這樣當有人決定沒有意識到這將導致所有的會話中斷更新在web.config事情通常發生。

導致它的另一件事是IIS中的一個設置,它定義了會話最後的持續時間,如果進入虛擬目錄/網站的屬性並單擊配置,選項選項卡上會話超時持續時間檢查這是啓用並設置爲一個足夠高的值。