asp.net刪除文件session丟失
我們有時(shí)動(dòng)態(tài)創(chuàng)建和刪除的文件夾,在ASP.NET 2.0中,文件夾刪除將導(dǎo)致一個(gè)AppDomain重新啟動(dòng),這將導(dǎo)致嚴(yán)重的問(wèn)題。 例如,對(duì)于一個(gè)電子商務(wù)網(wǎng)站的產(chǎn)品,你可能想存儲(chǔ)在目錄中的產(chǎn)品來(lái)自它的名字ID的產(chǎn)品的圖片,例如。/ productImages/123/ipod-nano.jpg,甚至為身份證圖像的記錄。 這有助于避免與其他上載的文件和圖像文件名沖突。 當(dāng)然,當(dāng)你來(lái)到刪除從數(shù)據(jù)庫(kù)產(chǎn)品,你自然要?jiǎng)h除其相應(yīng)的圖像和含有它的文件夾,但顯然不能因?yàn)檫@AppDomain重新啟動(dòng)的問(wèn)題。 因?yàn)?,我們刪除留在我們的服務(wù)器中的空文件夾(文件刪除不會(huì)引起應(yīng)用程序重新啟動(dòng))。
解決方案
幸運(yùn)的是,我們有了Reflection and HttpModules的解決方案。 首先創(chuàng)建一個(gè)像.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使用方法已過(guò)時(shí),在使用HttpModules可以響應(yīng)網(wǎng)絡(luò)(應(yīng)用程序生命周期的會(huì)話開(kāi)始,會(huì)話結(jié)束時(shí),)。 init方法在Global.asax同Application_Start作用是一樣的,Dipose類似于Application_End。
我們要以上述代碼起作用,需要在web.config文件<httpModules>區(qū)段中放入:
<add name="stopAppDomainRestartOnFolderDelete"
type="MyWebsite.StopAppDomainRestartOnFolderDeleteModule" />
需要說(shuō)明的是,"stopAppDomainRestartOnFolderDelete"為自定義的任意名稱,"MyWebsite"為上述.cs文件中的命名空間,一般為項(xiàng)目名稱."StopAppDomainRestartOnFolderDeleteModule"為上述.cs文件中的類名.
這就是它。 這將防止文件夾刪除AppDomain重新啟動(dòng),但修改web.config和bin文件夾時(shí)仍會(huì)重新啟動(dòng),這正是我們想要的。
但是多刪除幾個(gè)文件就會(huì)發(fā)現(xiàn)session還是會(huì)過(guò)期,為什么會(huì)是這樣的呢?現(xiàn)在還沒(méi)搞清楚...于是在網(wǎng)上搜索就有了下面的這種方式
在 <system.web>下面配置session的保存方式為stateserver就可以了
<sessionState mode="StateServer" stateNetworkTimeout="20"
stateConnectionString="tcpip=127.0.0.1:42424" />
參數(shù)一看就知道是什么意思了..
- asp.net(C#)清除全部Session與單個(gè)Session的方法
- C#程序中session值的保存方法以及轉(zhuǎn)為字符串的方法總結(jié)
- C#程序中session的基本設(shè)置示例及清除session的方法
- ASP.NET在底層類庫(kù)中獲取Session C#類中獲取Session
- C#實(shí)現(xiàn)簡(jiǎn)單獲取及設(shè)置Session類
- C#操作session的類實(shí)例
- asp.net(c#)有關(guān) Session 操作的幾個(gè)誤區(qū)
- IIS服務(wù)器中 ASP.NET State Service 開(kāi)啟后 Session 仍容易丟失的問(wèn)題終極解決辦法
- ASP.NET在IE10中無(wú)法判斷用戶已登入及Session丟失問(wèn)題解決方法
- C# SESSION丟失問(wèn)題的解決辦法
相關(guān)文章
ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection)中篇
這篇文章主要為大家再一次介紹了ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Entity Framework Core中執(zhí)行SQL語(yǔ)句和存儲(chǔ)過(guò)程的方法介紹
這篇文章介紹了Entity Framework Core中執(zhí)行SQL語(yǔ)句和存儲(chǔ)過(guò)程的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
詳解.NET Core+Docker 開(kāi)發(fā)微服務(wù)
這篇文章給大家分享了.NET Core+Docker 開(kāi)發(fā)微服務(wù)的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們參考下。2018-09-09
詳解ASP.NET-----Repeater數(shù)據(jù)控件的用法總結(jié)
本篇文章主要介紹了ASP.NET--Repeater數(shù)據(jù)控件的用法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。2016-11-11
Could not load file or assembly "App_Licenses.dll"
Could not load file or assembly "App_Licenses.dll"的問(wèn)題2010-03-03
asp.net 身份驗(yàn)證機(jī)制實(shí)例代碼
對(duì)于ASP.NET驗(yàn)證機(jī)制在項(xiàng)目開(kāi)發(fā)中運(yùn)用,會(huì)使項(xiàng)目非常方便快捷的實(shí)現(xiàn)頁(yè)面的訪問(wèn)權(quán)限問(wèn)題,而且省去了一些沒(méi)必要的安全問(wèn)題2012-06-06
asp.net Cookie值中文亂碼問(wèn)題解決方法
cookie里面不能寫中文,是由于cookie先天的編碼方式造成的,所以有必要存在一種中間的編碼方式:URLEncode是最好的選擇,感興趣的你可千萬(wàn)不要錯(cuò)過(guò)了哈,或許本文提供的知識(shí)點(diǎn)對(duì)你學(xué)習(xí)cookie有所幫助2013-02-02
在應(yīng)用程序級(jí)別之外使用注冊(cè)為allowDefinition=''MachineToApplication''的節(jié)是錯(cuò)誤的
在應(yīng)用程序級(jí)別之外使用注冊(cè)為 allowDefinition='MachineToApplication' 的節(jié)是錯(cuò)誤的2009-03-03

