asp.net删除文件session丢失

如果你曾经修改了ASP.NET应用程序(dll文件),与修改了bin文件夹或Web.config文件(添加/删除/重命名的文件等),而该网站在运行,你可能已经注意到,这将导致在AppDomain的重新启动。所有的会话状态会丢失和网站再次成功启动,任何登录的用户将被退出(假设你不使用持久Cookie身份验证)。 当然,当我们修改了web.config文件,并保存它,迫使一个AppDomain重新启动,这是我们需要的。

我们有时动态创建和删除的文件夹,在ASP.NET 2.0中,文件夹删除将导致一个AppDomain重新启动,这将导致严重的问题。 例如,对于一个电子商务网站的产品,你可能想存储在目录中的产品来自它的名字ID的产品的图片,例如。/ productImages/123/ipod-nano.jpg,甚至为身份证图像的记录。 这有助于避免与其他上载的文件和图像文件名冲突。 当然,当你来到删除从数据库产品,你自然要删除其相应的图像和含有它的文件夹,但显然不能因为这AppDomain重新启动的问题。 因为,我们删除留在我们的服务器中的空文件夹(文件删除不会引起应用程序重新启动)。

解决方案

幸运的是,我们有了Reflection and HttpModules的解决方案。 首先创建一个像.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可以响应网络(应用程序生命周期的会话开始,会话结束时,)。 init方法在Global.asax同Application_Start作用是一样的,Dipose类似于Application_End。

我们要以上述代码起作用,需要在web.config文件<httpModules>区段中放入:

<add name="stopAppDomainRestartOnFolderDelete"
type="MyWebsite.StopAppDomainRestartOnFolderDeleteModule" />
需要说明的是,"stopAppDomainRestartOnFolderDelete"为自定义的任意名称,"MyWebsite"为上述.cs文件中的命名空间,一般为项目名称."StopAppDomainRestartOnFolderDeleteModule"为上述.cs文件中的类名.

这就是它。 这将防止文件夹删除AppDomain重新启动,但修改web.config和bin文件夹时仍会重新启动,这正是我们想要的。

但是多删除几个文件就会发现session还是会过期,为什么会是这样的呢?现在还没搞清楚...于是在网上搜索就有了下面的这种方式

在 <system.web>下面配置session的保存方式为stateserver就可以了

<sessionState mode="StateServer" stateNetworkTimeout="20"
stateConnectionString="tcpip=127.0.0.1:42424" />
参数一看就知道是什么意思了..

时间: 2024-10-01 08:31:01

asp.net删除文件session丢失的相关文章

session丢失-c# 写入流文件session 丢失

问题描述 c# 写入流文件session 丢失 System.IO.StreamWriter sw = System.IO.File.AppendText(LogPath + sFileName); EXCEPTION_LEVEL enumLevel; EXCEPTION_TYPE enumType; ExceptionMessage.GetTypeLevelByCode(sCode, out enumType, out enumLevel); sw.WriteLine(DateTime.Now

ASP.NET技巧:Session丢失原因与解决方案小结

asp.net|session|技巧|解决 win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,造成保存在该进程中的session丢失. 因为Session,Application等数据默认保存在运行该Web应用程序的工作者进程中,如果回收工作者进程,则会造成丢失. 解决办法: 修改配置,设置为不定时自动回收该工作者进程,比如设置为当超出占用现有物理内存60%后自动回收该进程.通过使用默认应用程序池,可以确保多个应用程序间互

通过ASP网页删除文件代码

网页 此代码为最精简的删除方式,根据实际加以修改可灵活应用 '程序名:delfile.asp'关键参数:strUploadFiles 文件名称 例:<a href="delfile.asp?Action=test.rar">删除test.rar文件</a> <%strUploadFiles=Trim(Request.QueryString("strUploadFiles"))Action=Trim(Request.QueryString

asp fso删除文件DeleteFile与文件夹DeleteFolder

'==============================  '函 数 名:DelFolder  '作    用:删除文件夹  '参    数:文件夹相对路径FolderPath  '==============================  Function DelFolder(FolderPath)   If IsFolder(FolderPath)=True Then    Set Fso=Server.CreateObject("Scri"&"ptin

asp.net 删除文件夹,指定文件夹,删除文件夹和所有文件,删除权限设置,递归删除文件夹目录及文件

/// <summary>      /// 用递归方法删除文件夹目录及文件      /// </summary>      /// <param name="dir">带文件夹名的路径</param>       public void DeleteFolder(string dir)      {          if (Directory.Exists(dir)) //如果存在这个文件夹删除之           {      

asp.net编程实现删除文件夹及文件夹下文件的方法_实用技巧

本文实例讲述了asp.net编程实现删除文件夹及文件夹下文件的方法.分享给大家供大家参考,具体如下: //获取文件夹 string path = Server.MapPath("Image"); //获取文件夹中所有图片 if (Directory.GetFileSystemEntries(path).Length > 0) { //遍历文件夹中所有文件 foreach (string file in Directory.GetFiles(path)) { //文件己存在 if

asp无法删除黑客文件处理方法

<% '这里一定要完整的绝对路径,前面再加上"\?" 'delfolder "\?E:wwwliuhecai."'删除文件夹 'delfile "\?E:wwwuserliuhecai.index.asp教程"'删除文件 function Delfolder(t0)  'On Error Resume Next  Set fso=Server.CreateObject("Scripting.FileSystemObject&quo

asp.net 删除项目文件/文件夹IIS重启,Session丢失问题_实用技巧

仔细一看,SSO返回的ticket也不相同,才发现原来IIS重启了,最后解决方案如下: 新建一个类继承IHttpModule 复制代码 代码如下: /// <summary> /// Stops the ASP.NET AppDomain being restarted (which clears /// Session state, Cache etc.) whenever a folder is deleted. /// </summary> public class Stop

asp.net 修改/删除站内目录操作后Session丢失问题_实用技巧

后来经过试验发现,如果删除改变的目录不属于当前项目所在虚拟目录,则Session可用,相反则不可用:调试跟踪中提示的:Session.get_item()--返回null: 后经过研究发现,在虚拟目录删除改变目录会造成Session丢失,以至于失效.而session丢失的实质就是:应用程序重起! 这里有多种解决方案: 1)利用外部进程保存 session 2)利用数据库保存 session 3)用户ID放入cookie,若检测到session为空但cookie存在在重新初始化 session.