今天,在IIS上部署網站后,出現了下面錯誤:
只有在配置文件或 Page 指令中將 enableSessionState 設置為 true 時,才能使用會話狀態。還請確保在應用程序配置的 <system.web><httpModules> 節中包括 System.Web.SessionStateMod 或自定義會話狀態模塊。
這段代碼在web用戶空間中,一開始,百思不得其解,因為在Visual Sutio 2008中調試時沒有出現這樣的問題,於是百度后,有的說改Web.config中
<sessionState mode="StateServer" sqlConnectionString="data source=.;Integrated Security=SSPI" timeout="1440" />
可是改過后,還是沒有效果,又有的說重新建立工程,將文件一一重新復制進去,可以最后還是沒有用。
想想以前也用過這個控件,沒有出過錯啊,這個問題困惑了許多,某天,突然想到是不是session的問題,於是,這樣定義了session:
HttpContext context = HttpContext.Current;
而后,再使用:
if (context.Session["user"] != null) { }
后,提示:
這是錯誤變了,是session的問題了,突然想到會不會跟我之前使用URLRewriter.dll頁面偽靜態化有關呢?
百度了一下,改了下web.config竟然有用了。
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> </modules> <handlers>
找了下原因:
Session為空,程序沒有異常,那么問題就出在做偽靜態的URL重寫。IIS判斷偽靜態頁面請求不滿足Session這個配置節的默認的運行條件:managedHandler,就是說IIS認為這個請求只是請求一個靜態文件。靜態文件使用session是肯定會錯的。
至此,網頁使用正常。