asp.net刪除文件session丟失
更新時間:2010年09月24日 12:49:33 作者:
如果你曾經(jīng)修改了ASP.NET應(yīng)用程序(dll文件),與修改了bin文件夾或Web.config文件(添加/刪除/重命名的文件等),而該網(wǎng)站在運(yùn)行,你可能已經(jīng)注意到,這將導(dǎo)致在AppDomain的重新啟動
如果你曾經(jīng)修改了ASP.NET應(yīng)用程序(dll文件),與修改了bin文件夾或Web.config文件(添加/刪除/重命名的文件等),而該網(wǎng)站在運(yùn)行,你可能已經(jīng)注意到,這將導(dǎo)致在AppDomain的重新啟動。所有的會話狀態(tài)會丟失和網(wǎng)站再次成功啟動,任何登錄的用戶將被退出(假設(shè)你不使用持久Cookie身份驗證)。 當(dāng)然,當(dāng)我們修改了web.config文件,并保存它,迫使一個AppDomain重新啟動,這是我們需要的。
我們有時動態(tài)創(chuàng)建和刪除的文件夾,在ASP.NET 2.0中,文件夾刪除將導(dǎo)致一個AppDomain重新啟動,這將導(dǎo)致嚴(yán)重的問題。 例如,對于一個電子商務(wù)網(wǎng)站的產(chǎn)品,你可能想存儲在目錄中的產(chǎn)品來自它的名字ID的產(chǎn)品的圖片,例如。/ productImages/123/ipod-nano.jpg,甚至為身份證圖像的記錄。 這有助于避免與其他上載的文件和圖像文件名沖突。 當(dāng)然,當(dāng)你來到刪除從數(shù)據(jù)庫產(chǎn)品,你自然要刪除其相應(yīng)的圖像和含有它的文件夾,但顯然不能因為這AppDomain重新啟動的問題。 因為,我們刪除留在我們的服務(wù)器中的空文件夾(文件刪除不會引起應(yīng)用程序重新啟動)。
解決方案
幸運(yùn)的是,我們有了Reflection and HttpModules的解決方案。 首先創(chuàng)建一個像.cs文件...
using System.Reflection;
using System.Web;
namespace MyWebsite
{
/// <summary>
/// Stops the ASP.NET AppDomain being restarted (which clears
/// Session state, Cache etc.) whenever a folder is deleted.
/// </summary>
public class StopAppDomainRestartOnFolderDeleteModule : IHttpModule
{
public void Init(HttpApplication context)
{
PropertyInfo p = typeof(HttpRuntime).GetProperty("FileChangesMonitor",
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
object o = p.GetValue(null, null);
FieldInfo f = o.GetType().GetField("_dirMonSubdirs",
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);
MethodInfo m = monitor.GetType().GetMethod("StopMonitoring",
BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { });
}
public void Dispose() { }
}
}
如果您喜歡在 Application_Start使用Global.asax文件中,放置在Init()代碼在Application_Start 中。 我相信在Global.asax使用方法已過時,在使用HttpModules可以響應(yīng)網(wǎng)絡(luò)(應(yīng)用程序生命周期的會話開始,會話結(jié)束時,)。 init方法在Global.asax同Application_Start作用是一樣的,Dipose類似于Application_End。
我們要以上述代碼起作用,需要在web.config文件<httpModules>區(qū)段中放入:
<add name="stopAppDomainRestartOnFolderDelete"
type="MyWebsite.StopAppDomainRestartOnFolderDeleteModule" />
需要說明的是,"stopAppDomainRestartOnFolderDelete"為自定義的任意名稱,"MyWebsite"為上述.cs文件中的命名空間,一般為項目名稱."StopAppDomainRestartOnFolderDeleteModule"為上述.cs文件中的類名.
這就是它。 這將防止文件夾刪除AppDomain重新啟動,但修改web.config和bin文件夾時仍會重新啟動,這正是我們想要的。
但是多刪除幾個文件就會發(fā)現(xiàn)session還是會過期,為什么會是這樣的呢?現(xiàn)在還沒搞清楚...于是在網(wǎng)上搜索就有了下面的這種方式
在 <system.web>下面配置session的保存方式為stateserver就可以了
<sessionState mode="StateServer" stateNetworkTimeout="20"
stateConnectionString="tcpip=127.0.0.1:42424" />
參數(shù)一看就知道是什么意思了..
我們有時動態(tài)創(chuàng)建和刪除的文件夾,在ASP.NET 2.0中,文件夾刪除將導(dǎo)致一個AppDomain重新啟動,這將導(dǎo)致嚴(yán)重的問題。 例如,對于一個電子商務(wù)網(wǎng)站的產(chǎn)品,你可能想存儲在目錄中的產(chǎn)品來自它的名字ID的產(chǎn)品的圖片,例如。/ productImages/123/ipod-nano.jpg,甚至為身份證圖像的記錄。 這有助于避免與其他上載的文件和圖像文件名沖突。 當(dāng)然,當(dāng)你來到刪除從數(shù)據(jù)庫產(chǎn)品,你自然要刪除其相應(yīng)的圖像和含有它的文件夾,但顯然不能因為這AppDomain重新啟動的問題。 因為,我們刪除留在我們的服務(wù)器中的空文件夾(文件刪除不會引起應(yīng)用程序重新啟動)。
解決方案
幸運(yùn)的是,我們有了Reflection and HttpModules的解決方案。 首先創(chuàng)建一個像.cs文件...
復(fù)制代碼 代碼如下:
using System.Reflection;
using System.Web;
namespace MyWebsite
{
/// <summary>
/// Stops the ASP.NET AppDomain being restarted (which clears
/// Session state, Cache etc.) whenever a folder is deleted.
/// </summary>
public class StopAppDomainRestartOnFolderDeleteModule : IHttpModule
{
public void Init(HttpApplication context)
{
PropertyInfo p = typeof(HttpRuntime).GetProperty("FileChangesMonitor",
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
object o = p.GetValue(null, null);
FieldInfo f = o.GetType().GetField("_dirMonSubdirs",
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);
MethodInfo m = monitor.GetType().GetMethod("StopMonitoring",
BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { });
}
public void Dispose() { }
}
}
如果您喜歡在 Application_Start使用Global.asax文件中,放置在Init()代碼在Application_Start 中。 我相信在Global.asax使用方法已過時,在使用HttpModules可以響應(yīng)網(wǎng)絡(luò)(應(yīng)用程序生命周期的會話開始,會話結(jié)束時,)。 init方法在Global.asax同Application_Start作用是一樣的,Dipose類似于Application_End。
我們要以上述代碼起作用,需要在web.config文件<httpModules>區(qū)段中放入:
<add name="stopAppDomainRestartOnFolderDelete"
type="MyWebsite.StopAppDomainRestartOnFolderDeleteModule" />
需要說明的是,"stopAppDomainRestartOnFolderDelete"為自定義的任意名稱,"MyWebsite"為上述.cs文件中的命名空間,一般為項目名稱."StopAppDomainRestartOnFolderDeleteModule"為上述.cs文件中的類名.
這就是它。 這將防止文件夾刪除AppDomain重新啟動,但修改web.config和bin文件夾時仍會重新啟動,這正是我們想要的。
但是多刪除幾個文件就會發(fā)現(xiàn)session還是會過期,為什么會是這樣的呢?現(xiàn)在還沒搞清楚...于是在網(wǎng)上搜索就有了下面的這種方式
在 <system.web>下面配置session的保存方式為stateserver就可以了
<sessionState mode="StateServer" stateNetworkTimeout="20"
stateConnectionString="tcpip=127.0.0.1:42424" />
參數(shù)一看就知道是什么意思了..
您可能感興趣的文章:
- asp.net(C#)清除全部Session與單個Session的方法
- C#程序中session值的保存方法以及轉(zhuǎn)為字符串的方法總結(jié)
- C#程序中session的基本設(shè)置示例及清除session的方法
- ASP.NET在底層類庫中獲取Session C#類中獲取Session
- C#實現(xiàn)簡單獲取及設(shè)置Session類
- C#操作session的類實例
- asp.net(c#)有關(guān) Session 操作的幾個誤區(qū)
- IIS服務(wù)器中 ASP.NET State Service 開啟后 Session 仍容易丟失的問題終極解決辦法
- ASP.NET在IE10中無法判斷用戶已登入及Session丟失問題解決方法
- C# SESSION丟失問題的解決辦法
相關(guān)文章
生成代碼從T到T1、T2、Tn自動生成多個類型的泛型實例代碼
這篇文章主要給大家介紹了關(guān)于生成代碼從T到T1、T2、Tn自動生成多個類型的泛型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧2018-09-09C#中OpenFileDialog和PictrueBox的用法分析
這篇文章主要介紹了C#中OpenFileDialog和PictrueBox的用法,以實例的形式較為詳細(xì)的分析了OpenFileDialog和PictrueBox使用時的注意事項與具體用法,具有一定的參考借鑒價值,需要的朋友可以參考下2014-11-11ASP.NET 2.0下隨機(jī)讀取Access記錄的實現(xiàn)方法
ASP.NET 2.0下隨機(jī)讀取Access記錄的實現(xiàn)方法...2007-03-03asp.net 獨(dú)立Discuz頭像編輯模塊分離打包
在Discuz產(chǎn)品系列(包括UCenter、UCHome)中有一個flash頭像上傳編輯的功能比較好用,和之前自己用js實現(xiàn)的照片在線編輯插件比較像,于是想將它獨(dú)立出來,一方面可以學(xué)習(xí)研究,另一方面有機(jī)會可以在項目中使用(這里主要是指Asp.Net程序,php的與之類似)。2011-06-06ASP.NET數(shù)據(jù)綁定之DataList控件
這篇文章主要為大家介紹了ASP.NET數(shù)據(jù)綁定中的DataList控件,DataList控件以表的形式呈現(xiàn)數(shù)據(jù),通過該控件,您可以使用不同的布局來顯示數(shù)據(jù)記錄,對DataList控件感興趣的小伙伴們可以參考一下2016-01-01MVC 5 第一章 創(chuàng)建MVC 5 web應(yīng)用程序
本章將講述一些構(gòu)建ASP.NET MVC 5 web application的一些基礎(chǔ)知識, 通過本章學(xué)習(xí),你應(yīng)該能夠掌握到構(gòu)建MVC 5應(yīng)用程序的基本步驟,并且通過展示一個完整的MVC 5 hello world應(yīng)用程序了解MVC 5應(yīng)用程序所帶來的用戶體驗。2014-06-06