What:
SessionDiskCache 是一個在Asp.net中可插接使用的HttpModule,SessionDiskCache支援asp.net2.0,不支援asp.net1.0和asp.net1.1
Why:
通常在我們對系統進行維護時(或其他意外情況)可能導致使用者Session丟失,為了盡量減少此時的損失於是產生了SessionDiskCache
How:
SessionDiskCache在程式結束時將Session序列化到磁碟,程式重新開始時有新會話建立則檢查是否有同一SessionID的檔案,並將內容重新載入到Session
理論上使用SessionDiskCache無需對程式進行任何改動,但你需要為SessionDiskCache提供儲存功能的類增加可序列化標籤
Where:
SessionDiskCache可以用在個人網站,網站或企業級asp.net應用程式中
預備知識:
HttpModule
Session inproc
.net Serialization
如何安裝:
一、把編譯好的PBLee.WebUtil.SessionDiskCache.dll複製到web發布bin檔案夾下
二、修改web.config
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<section name="SessionDiskCache" type="PBLee.WebUtil.SessionDiskCache.SessionDiskCacheConfigurationSectionHandler, PBLee.WebUtil.SessionDiskCache"/>
</configSections>
<!-- Path 設定儲存Session序列檔案儲存路徑 ~\使用當前網站相對路徑 -->
<SessionDiskCache Path="~\SessionCache"/>
<system.web>
<httpModules>
<add type="PBLee.WebUtil.SessionDiskCache.SessionDiskCache, PBLee.WebUtil.SessionDiskCache" name="SessionDiskCache"/>
</httpModules>
</system.web>
</configuration>
三,為可以在SessionDiskCache中儲存的類增加可序列化標籤[Serializable][Serializable]
public class LoginUser
完成
SessionDiskCache如何工作:
作為HttpModule監聽Session_Start Session_End Application_End事件 sessionModule.Start +=new EventHandler(SessionDiskCache_SessionStart);
sessionModule.End +=new EventHandler(SessionDiskCache_SessionEnd);
context.Disposed +=new EventHandler(context_ApplicationEnd);
Session開始時檢查是否有已序列到磁碟的Session對象private void SessionDiskCache_SessionStart(object sender, EventArgs e)
{
HttpSessionState session = HttpContext.Current.Session;
session["SessionID"] = session.SessionID;
SessionList.Add( session );
LoadSession( session );
}
Application停止時將所有Session儲存到磁碟private void context_ApplicationEnd(object sender, EventArgs e)
{
foreach ( System.Web.SessionState.HttpSessionState session in SessionList )
{
SaveSession( session );
}
}
注意:
SessionDiskCache只能用於可捕獲Application_End的情況,如bin檔案夾變動,web.config變動,IIS停止
如果您準備使用SessionDiskCache,請盡量瞭解前面提到的預備知識,已備在需要修改時有能力獨立完成。
本工具以免費開放原始碼方式提供,不保證提供支援人員和版本更新
相關技術討論可以在本Blog(http://pblee.cnblogs.com)進行
原始碼和Sample 點擊這裡下載