处理Session事件

来源:互联网 发布:windows运行库 编辑:程序博客网 时间:2024/06/05 20:06

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