Global.asax中包含两个处理的关联Session状态的事件:Session Start 和Session End事件。
Session Start 事件在一个新用户会话开始时被触发。可以利用该事件从数据库载入用户信息。
例如:可以利用Session Start 事件载入用户购物车。
Session End事件在回话终止时被触发。会话会因用户不活动而过期或者因显示的使用Session.Abandon()方法而终止。
可以利用Session End事件
例如:在希望自动保存用户的购物车到数据表中时。
Code:
void Application_Start(object sender,EventArgs e)
{
Application["SessionCount"] =0;
}
void Session_Start(object sender,EventArgs e)
{
Application.Lock();
int count=(int)Application["SessionCount"];
Application["SessionCount"]=count+1;
Application.UnLock();
}
void Session_End(object sender,EventArgs e)
{
Application.Lock();
int count=(int)Application["SessionCount"];
Application["SessionCount"]=count-1;
Application.UnLock();
}
上例中:Global.asax文件用来跟踪活动会话的数量。任何时候一个新的会话开始时,Session Start 事件将被触发,SessionCount变量增加1.
当会话终止时,Session End事件被触发,SessionCount变量减1.
SessionCount 变量被保存在Application状态中,Application状态包含的项被应用程序的所有用户共享。
注意:在修改Application对象时锁住了它,必须对Application对象加锁和解锁,因为在同一时间,有可能多个用户都访问Application状态中相同的项。
注解:应用程序状态在ASP.NET中很少被使用。大多数情况下,应该使用Cache对象而不是Application状态,因为Cache对象被设计成能够自动管理内存。
并不是所有的会话存储提供程序都会触发Session End事件,InProc会话存储提供程序(默认的会话提供程序)会触发,但是StateServer或者SQLServer状态提供程序就不会触发。
默认情况下,如果用户20分钟后还不请求也米那,ASP.NET Framework 就认为他已离开应用程序。
在某些情况下,我们可能会修改默认的过期时间值。
增加会话的过期时间的坏处是:应用程序会消耗更多的内存。会话的过期时间越长,潜在的就有可能消耗更多的服务器内存。
可以在Web配置文件中设置会话过期时间,或者也可以以编程的方式设置会话的过期时间,
Web.Config中
<configuration>
<system.web>
<sessionState timeout="60"/>
</system.web>
</configuration>
编程方式把Session的过期时间从20分钟设置为60分钟:
Session.Timeout=60