2011-02-04 240 views
1

我有一個asp.net應用程序c#,它在用戶登錄時使用會話狀態來存儲變量。這是它們的登錄名,它在整個用戶區廣泛使用。問題是會話不斷丟失某些計算機上的信息。我對會話狀態瞭解不夠,我想知道爲什麼會發生這種情況。一個例子。當用戶在網格上經歷不同的選擇時,在大約2分鐘之後,在屏幕上顯示會話狀態變量的標籤是空的,當他們想添加記錄時,由於數據庫要求他們的用戶名加蓋一個記錄。會話狀態丟失值

綜上所述。什麼會導致會話狀態變量在幾分鐘後失去其值,而不是在所有的計算機上。 (我的電腦上沒有問題,只在客戶端機器上 - 典型的不是這樣)

更多的信息;

我使用服務器端代碼的會議,即

session["username"] = username.Text; 

,也是主辦我已經是一個共享的主機環境中,這意味着我很少做的IIS設置(相當便宜工作IM害怕)會嘗試網絡配置更改並報告回來。感謝所有的答案。

+0

需要知道您正在使用的會話狀態提供程序以及多少個Web服務器。 – 2011-02-04 16:57:48

+3

只是好奇,如果它只是你想要的登錄名,有什麼特別的原因你使用Session而不是HttpContext.Current.User.Identity.Name? – David 2011-02-08 20:05:33

+0

prod web服務器的結構是什麼? Web Farm與負載平衡器? – odez213 2011-02-09 13:52:55

回答

4

如果我明白你的問題,你必須將會話數據存儲在流程之外。如果您有SQLServer數據庫,則可以使用「狀態服務器模式」或「SQL Server模式」。

在這裏你可以找到如何使用http://msdn.microsoft.com/en-us/library/ms178586.aspx

否則,您可以建立一個「自定義會話狀態存儲提供者」,但我認爲這方法是有點複雜。

2

也許會話在2分鐘後超時?該值應在web.config在這行

<sessionState timeout="40"></sessionState> 

或者你可以在global.asax寫會話超時處理,把一個斷點,看看是否是這樣的原因。

0

存儲會話狀態有多種方式,其中最常見的兩種是客戶端cookie和服務器端會話。 (我們可以進入會話狀態服務器和數據庫存儲會話,但我寧願不)

當你說其他用戶正在issuse,但你不讓我覺得他們的會話可能會過期。很難說出用戶總是在做什麼,但是一個好的測試就是登錄,讓它靜坐一兩個小時,然後回來看看你是否還有會話狀態。您可以在IIS中控制會話超時,也可以在web.config中設置它。即使在大多數情況下配置「應該」覆蓋iis設置,但在這些情況下它不能正常工作,並且最好更新IIS和Web配置會話狀態到期。

-1

我認爲你大量使用會話來存儲值...只在需要時使用它。

在這裏爲你所面對經常出現的問題,然後在IIS檢查,增加application pool的網站,爲您的網站將使用更多的內存,則allowed應用程序池,因此IIS recycles the sessionsession values are LOST

4

這聽起來像(雖然我可能是錯的),你有多個IIS服務器,每個維護狀態。如果您負載平衡,則無法保證您將兩次訪問同一臺服務器。因此,雖然服務器A具有您要查找的狀態信息,但服務器B不會。

你是負載平衡嗎?如果是這樣,你可能想使用SQL服務器進行狀態管理。