大家随便建个网站项目,然后随便建个aspx页面.
然后在页面中放入以下代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session.Timeout = 60;
}
}
然后在页面上放个Button控件:
<asp:Button ID="Button1" runat="server" Text="Button" />
然后对页面进行调试,监控Session.Timeout的值。
1,当页面第一次执行的时候Session.Timeout的值由Web.config中配置的默认session timeout值20变为了60,这没有任何问题。
2,但是当你点击页面上的Button按钮进行页面回发后,Session.Timeout又变回了Web.config中配置的值20。
但是当你在项目中加入Global.asax后,再重复上面的步骤1和2,你会发现步骤2中Session.Timeout的值就保持为60了。经过测试发现是只要Global.asax中有void Session_Start(object sender, EventArgs e)函数(函数体什么都没有都可以)步骤2中Session.Timeout的值就是60,如果Global.asax中没有void Session_Start(object sender, EventArgs e)函数步骤2中Session.Timeout的值就是20。按道理来说步骤2的步骤2中Session.Timeout的值应该是60,因为Session的数据是存储在服务器端的,只要用户的Session不过期,那么该用户的Session.Timeout值应该始终为在页面上更改后的值60.出现这样的奇怪问题不知道算不算ASP.NET的一个BUG。
经测试上述问题在VS2010即.Net 4.0下还是存在。