Session结束的控制

服务器怎么知道一个Session结束了呢?换句话说,怎样知道是否已经离开了这个站点而去了另一个站点或者已经关掉电脑看电影去了呢。如果一个人一直没有提出请求或者刷新主页长达20分钟,那么服务器就默认为用户已经离开了。这种策略就使得服务端可以释放对用户进程进行跟踪时使用的资源。

对于有些网络站点,20分钟显然有些短,例如,对于高水平选手进行的网络围棋,很多步子是要长考的。那么这时候20分钟如果释放了资源,这个棋手就可能被服务端轰出局,这就不爽了。

有些网络站点则相反,资源有限而访问量又很大,没有什么需要耗费时间的信息传递,那么白白浪费资源是很可惜的,也会使其他访问者的访问速度受到影响。

不过,对于Active Server Pages来说,对这些进行控制都没什么难度,Session对象有这种Timeout属性,你完全可以限定一个Session存在的限定时间。例如:下面这个脚本将限制时间设为60分钟:

<% Session.Timeout=60 %>

注意

你也可以利用Internet Service Manager来进行这种控制。从Application设置对话框中,点击Active Server Pages表并且限定Session的限制时间。

当用户的Session时间过期后,如果用户刷新了主页,那么将被认为是新的访问者,所有以前的Session信息会全部失去。你也可以利用Abandon方法来消除一个Session。这里再引入一个SessionID属性,这将自动分别为每一个Sessioin分配不同的编号。

<HTML>
<HEAD><TITLE>Abandon Session</TITLE></HEAD>
<BODY>
<BR>这个用户自动编号为<%=SessionID %>
<% Session.Abandon %>
<BR>这个用户自动编号为<%=SessionID %>
</BODY>
</HTML>

要说明的是,对于一个Session来说,无论用户怎样进行主页间切换,都会只有一个SessionID,但是由于这里面使用了Session.Abandon,那么就使得这个主页开辟了一个Session后随即消除,然后又开辟了一个,对于服务端来说,是两个不同的Session,其中前面的已经关闭,后面的仍然保持。