2012-09-17 35 views
-1

我通過這句法存儲在我的網站(MVC3-.NET4-IIS7)的一些信息:爲什麼HttpContext.Current不起作用?

HttpContext.Current.Application.Add(appKey, value); 

,並通過這一個讀取數據:

HttpContext.Current.Application[appKey]; 

它工作正常,但之後很短的時間(約20分鐘)它不工作,無法找到[appKey],我想知道 它有一些設置要麼有它到期時間?

我在我的web.config中將我的cookie過期時間更改爲7天,但尚未工作。

感謝您的幫助

回答

2

這些值存儲在內存中。如果應用程序被IIS回收,則AppDomain將關閉,並且存儲在內存中的所有內容都將丟失。不要忘記,IIS可以隨時回收您的應用程序。例如,如果某些內存/ CPU閾值得到滿足。因此,如果您在應用程序回收後未嘗試讀取該值,則該值不會存在。

因此,您應該考慮使用更持久的位置來存儲此信息,而不是將其存儲在內存中。

我在我的web.config中將我的cookie過期時間更改爲7天,但尚未工作。

您在應用程序狀態下存儲的值與Cookie無關。它們存儲在服務器上。

+0

我把機器的關鍵在我的配置文件,我想知道這可以隔離我的網站私人從IIS可以回收? – motevalizadeh

+0

即使您開始用盡內存,也可以將IIS配置爲永不回收網站。顯然,這是一個非常糟糕的想法,您應該考慮將此信息保存在更加永久的位置,例如文件或數據庫。 –

+0

你對我的解決方案是什麼?我希望商店成員登錄信息,直到他們在他們的個人資料中,退出後刪除這些信息 – motevalizadeh

0

這不是用你的cookie做的,HttpContext.Current是由你的session決定的,默認是20分鐘。

您可以通過在你的web.config設置增加時間:

<configuration> 
… some config here … 
<system.web> 
    <sessionState timeout="XXX" /> 
…some more config 
</system.web> 
</configuration> 

值得一提的,因爲達林了,你的方法是否真的你應該反正做什麼。