• 您好,欢迎来到专业的网络整合营销服务商时代优客官网

  • 今天是:
时代优客品牌LOGO 联系时代优客做网站、推广和整合营销
行业新闻
建站知识
优化经验
网站公告



新闻
解决SESSION过期 返回首页 > 新闻资讯> 正文

解决SESSION过期

 经常做asp.net项目的应该知道,如果你修改了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" />

以上解决方式参照网络相相关技术文章,如有不同疑问,可以咨询中国优客管理员


关于我们
公司概况
企业文化
服务团队
公司优势
招贤纳士

网站建设
建站套餐
建站流程
网站改版
网站维护

网站优化
优化报价
优化顾问
优化营销

新闻资讯
行业新闻
建站知识
优化经验

营销推广
软文营销
微博营销
微信营销
论坛营销
搜索营销

联系我们
联系方式
付款方式


Copyright 2007-2015 时代优客 www.nyouke.com 版权所有
服务热线:15220051980 粤ICP备14048661号-1