Session丢失有关问题调试
Session丢失问题调试有时候发现IIS网站经常session丢失,用户被迫重新登陆网站。造成这个问题的原因可能有这
Session丢失问题调试
有时候发现IIS网站经常session丢失,用户被迫重新登陆网站。造成这个问题的原因可能有这么几种
session timeout过短应用程序池回收程序调用主动关闭session
Session timeout
首先要确定这个网站是asp还是asp.net网站,IIS对于ASP和ASP.net的session配置在不同的地方。
对于ASP网站,session的控制在IIS Manager - Website Features - ASP - Services - Session Properties,通过这里的配置可以控制是否启用session,最大session数量以及session timeout时间等配置。
对于ASP.NET网站,session的控制在IIS Manager - Website Features - Session State,通过这里可以控制asp.net session相关的属性。
应用程序池回收
如果想判断是否是应用程序池重起造成的问题,可以通过IIS log或者Event Log来判断是否在发生问题的时间应用程序池发生过重起。
IIS log来判断的方式比较简单,
打开发生问题当天的IIS log,注意IIS log中记录的时间一般是UTC时间。如果IIS在某一时间发生过重起,那么log的头会重新写入,如下
#Software: Microsoft Internet Information Services 7.5#Version: 1.0#Date: 2012-11-09 05:05:00#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
通过Event log来判断需要打开IIS Recycle Event logging,链接如下
logEventOnRecycle
http://www.iis.net/configreference/system.applicationhost/applicationpools/add/recycling
打开之后应用程序池重起就会写入系统日志,直接查看系统日志即可。
应用程序池重起的原因多种多样,比如
Machine.Config, Web.Config or Global.asax are modifiedThe bin directory or its contents is modifiedThe number of re-compilations (aspx, ascx or asax) exceeds the limit specified by the <compilation numRecompilesBeforeAppRestart=/> setting in machine.config or web.config (by default this is set to 15)The physical path of the virtual directory is modifiedThe CAS policy is modifiedThe web service is restarted(2.0 only) Application Sub-Directories are deleted (see Todd’s blog http://blogs.msdn.com/toddca/archive/2006/07/17/668412.aspx for more info)
程序调用主动关闭session另外一种不太常见的可能性是程序本身调用了结束session的方法或者手动设置了一个不同的session timeout值,例如asp的Session.Abandon方法或者asp.net中的HttpSessionState.Abandon方法。这种情况的调试方法可以通过在SessionStateModule.End时间中记录一些调用栈相关信息来判断是否有该问题发生。http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end(v=vs.100).aspx