asp.net删除文件session丢失

 更新时间:2010年09月24日 12:49:33   作者:  
如果你曾经修改了ASP.NET应用程序(dll文件),与修改了bin文件夹或Web.config文件(添加/删除/重命名的文件等),而该网站在运行,你可能已经注意到,这将导致在AppDomain的重新启动
如果你曾经修改了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" />
参数一看就知道是什么意思了..

相关文章

  • 生成代码从T到T1、T2、Tn自动生成多个类型的泛型实例代码

    生成代码从T到T1、T2、Tn自动生成多个类型的泛型实例代码

    这篇文章主要给大家介绍了关于生成代码从T到T1、T2、Tn自动生成多个类型的泛型的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧
    2018-09-09
  • C#中OpenFileDialog和PictrueBox的用法分析

    C#中OpenFileDialog和PictrueBox的用法分析

    这篇文章主要介绍了C#中OpenFileDialog和PictrueBox的用法,以实例的形式较为详细的分析了OpenFileDialog和PictrueBox使用时的注意事项与具体用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • 如何取得Repeater控件选择的项目及注意事项

    如何取得Repeater控件选择的项目及注意事项

    Repeater控件,每个item前有一个CheckBox,把选择的item列显出来,有两个地方需要注意的,就是CheckBox与Label,这个Label是随你需要获取的内容而变化喔。如你想获取Nickname,那你需要把绑定的的内容放在Label上
    2013-01-01
  • ASP.NET 2.0下随机读取Access记录的实现方法

    ASP.NET 2.0下随机读取Access记录的实现方法

    ASP.NET 2.0下随机读取Access记录的实现方法...
    2007-03-03
  • asp.net 独立Discuz头像编辑模块分离打包

    asp.net 独立Discuz头像编辑模块分离打包

    在Discuz产品系列(包括UCenter、UCHome)中有一个flash头像上传编辑的功能比较好用,和之前自己用js实现的照片在线编辑插件比较像,于是想将它独立出来,一方面可以学习研究,另一方面有机会可以在项目中使用(这里主要是指Asp.Net程序,php的与之类似)。
    2011-06-06
  • ASP.NET MVC对URL匹配操作

    ASP.NET MVC对URL匹配操作

    这篇文章介绍了ASP.NET MVC对URL匹配操作的实现,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • ASP.NET数据绑定之DataList控件

    ASP.NET数据绑定之DataList控件

    这篇文章主要为大家介绍了ASP.NET数据绑定中的DataList控件,DataList控件以表的形式呈现数据,通过该控件,您可以使用不同的布局来显示数据记录,对DataList控件感兴趣的小伙伴们可以参考一下
    2016-01-01
  • MVC 5 第一章 创建MVC 5 web应用程序

    MVC 5 第一章 创建MVC 5 web应用程序

    本章将讲述一些构建ASP.NET MVC 5 web application的一些基础知识, 通过本章学习,你应该能够掌握到构建MVC 5应用程序的基本步骤,并且通过展示一个完整的MVC 5 hello world应用程序了解MVC 5应用程序所带来的用户体验。
    2014-06-06
  • asp.net中一个linq分页实现代码

    asp.net中一个linq分页实现代码

    asp.net中一个linq分页实现代码,需要的朋友可以参考下。
    2011-12-12
  • asp.net 无重复随机数代码

    asp.net 无重复随机数代码

    asp.net产生无重复随机数的实现代码
    2008-11-11

最新评论