一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - asp.net刪除文件session丟失

asp.net刪除文件session丟失

2019-09-08 11:27asp.net之家 ASP.NET教程

如果你曾經(jīng)修改了ASP.NET應(yīng)用程序(dll文件),與修改了bin文件夾或Web.config文件(添加/刪除/重命名的文件等),而該網(wǎng)站在運行,你可能已經(jīng)注意到,這將導致在AppDomain的重新啟動

如果你曾經(jīng)修改了ASP.NET應(yīng)用程序(dll文件),與修改了bin文件夾或Web.config文件(添加/刪除/重命名的文件等),而該網(wǎng)站在運行,你可能已經(jīng)注意到,這將導致在AppDomain的重新啟動。所有的會話狀態(tài)會丟失和網(wǎng)站再次成功啟動,任何登錄的用戶將被退出(假設(shè)你不使用持久Cookie身份驗證)。 當然,當我們修改了web.config文件,并保存它,迫使一個AppDomain重新啟動,這是我們需要的。 

我們有時動態(tài)創(chuàng)建和刪除的文件夾,在ASP.NET 2.0中,文件夾刪除將導致一個AppDomain重新啟動,這將導致嚴重的問題。 例如,對于一個電子商務(wù)網(wǎng)站的產(chǎn)品,你可能想存儲在目錄中的產(chǎn)品來自它的名字ID的產(chǎn)品的圖片,例如。/ productImages/123/ipod-nano.jpg,甚至為身份證圖像的記錄。 這有助于避免與其他上載的文件和圖像文件名沖突。 當然,當你來到刪除從數(shù)據(jù)庫產(chǎn)品,你自然要刪除其相應(yīng)的圖像和含有它的文件夾,但顯然不能因為這AppDomain重新啟動的問題。 因為,我們刪除留在我們的服務(wù)器中的空文件夾(文件刪除不會引起應(yīng)用程序重新啟動)。 

解決方案 

幸運的是,我們有了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ù)一看就知道是什么意思了..

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 高h肉厨房 | 美女女女女女女bbbbbb毛片 | 国产精品成人在线播放 | 亚洲成人福利网站 | a级片欧美 | 99成人免费视频 | 波多野结衣黑人系列在线观看 | 国外欧美一区另类中文字幕 | 免费看又黄又爽又猛的视频软件- | 国产精品亚洲精品日韩已方 | 国内精品久久久久久久久 | 99久久免费看精品国产一区 | 91麻豆在线观看 | 无码乱人伦一区二区亚洲 | anal22日本人视频 | 99久久香蕉 | 美女扒开尿口让男生添 漫画 | 亚洲视频在线免费观看 | 男人桶女下面60分钟视频 | 日韩毛片基地一区二区三区 | 欧美性一区二区三区 | 交换性关系中文字幕6 | 日本免费一区二区三区a区 日本免费三片在线观看 | 日韩一区二区三区四区五区 | www.国产一区二区三区 | 草莓视频网站18勿进 | 男人捅女人的鸡鸡 | 成人亚洲欧美日韩在线观看 | 洗濯屋H纯肉动漫在线观看 武侠艳妇屈辱的张开双腿 午夜在线观看免费观看 视频 | 午夜精品网站 | 午夜爽喷水无码成人18禁三级 | 国产伦精品一区二区 | 武侠艳妇屈辱的张开双腿 | a国产在线| 国产亚洲精品美女2020久久 | 好湿好紧太硬了我太爽了h 好湿好滑好硬好爽好深视频 | 国产精品3p视频 | 阿 好深 快点 老师受不了 | 欧美折磨另类系列sm | 波多野结衣亚洲一区 | 亚洲天堂男人天堂 |