﻿# 如何讓 ASP.NET 使用 Session 資料時不要再自動消失

我們在 ASP.NET 網站使用 Session 時，常常因為 web.config 修改或更新 Bin\\ 目錄下的 dll 而導致 Session 消失，Session 常常消失也挺惱人的，不是導致突然被自動登出，就是發生非預期的 Exception ... 等。 ( 有時候因為主機安裝防毒軟體也會造成 Session 資料無故消失，因為這些防毒軟體可能會誤判某檔案、某記憶體含有病毒資訊 )

這個時候我們可以將 Session 預設的模式 ( InProc ) 改成 StateServer 模式，但此時必須確認本機的 ASP.NET 狀態服務 是啟動的狀態！

> 1.  請到 控制台 > 系統管理工具 > "服務"
>     
> 2.  找到 "ASP.NET 狀態服務" 或 "ASP.NET State Service"
>     
> 3.  此服務預設是屬於「停用」的狀態，請先切換到「自動」再按下「套用」再直接按「啟動」按鈕即可。
>     
> 
> ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/56a113f2cafe41406aaa-Screenshot-080110-145249.png)

接者你可以到你的 ASP.NET 網站設定 web.config 組態檔，設定如下：

> <configuration>  
>   <system.web>  
>     <sessionState mode="StateServer"  
>       stateConnectionString="tcpip=localhost:42424"  
>       cookieless="false"  
>       timeout="20"/>  
>   </system.web>  
> </configuration>

這樣就可以將 Session 的資料存到本機的 ASP.NET 狀態服務去了，也不會無故 Session 自動消失了。

除了這個方法外，ASP.NET 還可以用 SQL Server 儲存 Session 資料，至於設定的方法可以參考 MSDN 網頁，網址如下：

> HOW TO：設定 SQL Server 以儲存 ASP.NET 工作階段狀態  
> [http://support.microsoft.com/kb/317604](http://support.microsoft.com/kb/317604)

**相關連結：**

-   [ASP.NET 裡的工作階段狀態實作的基礎](http://www.microsoft.com/taiwan/msdn/library/2003/Oct-2003/ASPNetSessionState.htm "ASP.NET 裡的工作階段狀態實作的基礎")  
    
-   [Fast, Scalable, and Secure Session State Management for Your Web Applications](http://msdn.microsoft.com/msdnmag/issues/05/09/SessionState/default.aspx "Fast, Scalable, and Secure Session State Management for Your Web Applications")  
    
-   [sessionState Element (ASP.NET Settings Schema)](http://msdn2.microsoft.com/en-us/library/h6bb9cz9.aspx "sessionState Element (ASP.NET Settings Schema)")  
    
-   [Understanding session state modes + FAQ](http://forums.asp.net/p/7504/7504.aspx "Understanding session state modes + FAQ")  
    
-   [ASP.NET Session State](http://msdn2.microsoft.com/en-us/library/ms972429.aspx)
