asp.net刪除檔案夾後引起Session丟失的解決辦法

來源:互聯網
上載者:User

最簡單的辦法就是不要使用預設的方式也即
InProc(預設,進程內的工作階段狀態):Session儲存在IIS進程中(Web伺服器記憶體)。如果使用的是Windows 2000 Server或Windows XP,IIS使用aspnet_wp.exe進程,如果使用的是Windows 2003 Server,IIS使用w3wp.exe。

InProc擁有最好的效能。但進程內Session很容易丟失Session資訊。如果重啟了應用程式,所有的Session資訊就會丟失。而很多原因 都會導致ASP.NET應用程式的重啟。
修改了Web.Config或Global.asax檔案,或改變了檔案的修改日期。
修改了\bin或\App_Code目錄裡的檔案。
防毒軟體修改了上述檔案等等

你可以考慮以下兩種方式
1、StateServer(進程外的工作階段狀態):Session儲存在獨立的 Windows服務進程aspnet_state.exe中

如果要啟用StateServer中的Session狀態,首先要在”控制台”--“管理工具”--“服務”中,啟用ASP.NET State Services(ASP.NET 狀態服務),並將此服務設定為Automatic(自動啟動)

啟動ASP.NET狀態服務後,需要配置ASP.NET應用程式來使用它。
我們需要在Web.Config檔案中system.web節點中添加如下代碼
<sessionState mode="StateServer" stateNetworkTimeout="20"
stateConnectionString="tcpip=127.0.0.1:42424" />
首先,mode屬性被設為StateServer。接著,stateConnectionString屬性用來指定ASP.NET狀態伺服器端的位置。連 接位置被建立為在127.0.0.1,連接埠42424。最後,stateNetworkTimeout屬性用來指定連線逾時的秒數。
需要注意的是,此時必須把對象標註為可序列化後(使用Serializable特性標記需要序列化的類)才能在服務中進行儲存。Microsoft建議所 有的開發人員在開發過程中都使用進程外的工作階段狀態,以避免項目如果切換到其他進程外的提供者或SqlServer而導致網站的錯誤。

或者使用
2、SqlServer:Session儲存在SqlServer資料庫的表中,可以用 aspnet_regsql.exe配置它(SqlServer伺服器)

還一種辦法是釆用虛擬目錄的方法:

前提是你有再 web(專案檔夾)網站下建立虛擬目錄的許可權,並且可以將虛擬目錄指定到web檔案夾外部

比如應用程式的上傳檔案夾是/Uploadfiles,那麼需要在IIS中給web網站下面建立一個Uploadfiles虛擬目錄,並指向web檔案夾 外部的另一個檔案夾。

並且刪除web下面的uploadfiles物理目錄

這樣子就可以繞過修改web檔案結構而引起session丟失的問題,實現刪除檔案夾而不會引起應用程 序重啟

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.