上海网基网站优化技术有限公司
首页 | 联系方式 | 加入收藏 | 设为首页

服务项目

联系方式

联系人:刘小姐
电话:400-807-6757
手机:18042313315
邮箱:service@zylmagic.com

当前位置:首页 >> 网站设计 >> 正文

如何解决SESSION过期

编辑:上海网基网站优化技术有限公司   时间:2013/03/29   字号:
摘要:如何解决SESSION过期
做过asp.net项目经验的人都知道,如果你更改了bin文件夹、ASP.NET应用程序或者Web.config文件,而这个网站还在正常的运行,就会知道导致AppDomain的重启。网站会重新启动、所有的对话状态都不丢失,登陆的用户也会强制退出。但是,只要我们更改了web.config文件并保存它,迫使一个AppDomain重新启动,所有的问题就都迎刃而解了。
但是,在ASP.NET 2.0中,有时动态删除或者创建的文件,将导致一个AppDomain重新启动,这是一个很严重的问题。比如,对于一个电子商务网站的产品,你可能想存储在目录中的产品来自它的名字ID的产品的图片。还有/ productImages/123/ipod-nano.jpg,甚至为身份证图像的记录。这会很好的避免图片文件和上载文件冲突。当你要删除产品时,你必须要删除其含有它的文件和相对应的图片,但还尽量避免AppDomain重新启动。所以,我们要删除服务器中的空文件夹,而且还不能影响其它系统的正常运行。下面网站建设公司就教您如何解决SESSION过期吧。
下面我们就提供解决方案,用Reflection and HttpModules的解决方案。
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文件中,代码在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
我相信通过以上的介绍,大家已经对如何解决SESSION过期有所了解了,如果还有疑问,可以在线进行咨询。
上一条:暂时没有! 下一条:如何才能精简CSS代码