ASP中会话的使用案例

  介绍

这篇文章主要介绍ASP中会话的使用案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

写过稍微大型一点ASP的人都知道,会话这个对象真是好,用它可以用来记录使用者私有的资料变量,既安全又方便。但是你真的知道会话的运作原理吗?

写过稍微大型一点ASP的人都知道,会话这个对象真是好,用它可以用来记录使用者私有的资料变量,既安全又方便。但是你真的知道会话的运作原理吗?或许了解以后,你就再也不太敢使用这个令人又爱又恨的对象。虽然转而替代之的方法稍嫌麻烦,但在长期考量之下,也就不得不这么做了

首先来讲讲会议的好处,它可以用来记录客户端私有的资料变量,并且在时间范围内不会消失。这真的是很重要的功能,尤其是有会员的系统必须要用到的。像是会员的登入帐号,时间,状态以及许许多多该记录的实时数据﹝如购物系统记录使用者的购物篮内的商品﹞,这些信息属于各使用者私人所需要,通常开发者都是使用会话记录处理。

然而,在ASP中的会话是使用饼干所构成,服务器将所有的会话内记录的资料,以饼干的方式传至用户的浏览器。通常一般浏览器会将这些饼干存起来,每当使用者点选连结,再次与服务器做联机时,浏览器就会把这些饼干传回服务器供做处理。这即是会话的运作原理,当资料量大一点时,由于必须传出去又收回来,不但吃线路频宽,效能相对降低,因为服务器必须花费更多的资源在做联机处理和重新配置内存等初始动作。现在你可能会想“我必须用这功能,只好牺牲点了”,不过本文讲会话一方面是教导大家少用,另一方面当然是有替代办法,紧接着上场的,就是同属全球。阿萨内的应用程序对象。

应用程序也是记录处理暂时资料的好手,各方面的能力和用法都和会话一样,只不过相较之下,它所记录的资料是属于公用的,也就是任何使用者都可以共享的变量空间类不像会话,不是将资料传给使用者,等下一次联机再读取回来,它是直接记录在服务器上的内存,相对之下效能上快上会话许多。

由于应用程序对象是公用的,首先必须做的,就是要把一块公用的区域规划给各个使用者,让每个用户拥有自己的区域可以记录资料,以达到仿真会话的目的。现在有两种做法:

一,在服务器激活时事先初始化建立及分配使用者内存空间,通常这种做法虽然一服务器开机就先占了许多资源,但也省去了以后每当使用者联机就必须做一次分配的麻烦。但有个限制,使用这种方法必须限制最大人数,由于是一激活就初始化,我们只能预估建立某数量的内存空间,所以这种方法通常用于聊天室这种小型的程序上。

二,这种方法对于大型应用程序来说应该算较恰当的,采用动态的分配法,当使用者第一次联机到服务器上才开始分配资源给此用户。这两种仿真会话的方案,目的都是减轻会话资源的消耗,但毕竟还是无法完全替代,我们还是需要使用到一点点,至少对服务器已经能减轻不少负担了。

第一方案

首先我们开始第一个方案的实作,由于是激活时初始化应用程序,我们当然要从全球。asa中着手:

已经完成初始化了,但如何使用呢?我们只要在使用者登入的地方,把原本使用会话储存的资料,如帐号,登入时间,改成我们建立好的应用对象中就可以了:

代码如下:

& # 39;   寻找未被使用的空间   为   i=1到应用程序(“ClientMax")   如果   应用程序(“User_Status_",那我)=0   & # 39;使用者暂时编的号   会话(“Index")=我   & # 39;锁定   应用Application.Lock   & # 39;设成已使用的状态应用程序(“User_Status_",我)=1 & # 39;放入变量数据   应用程序(“User_Ac   数   _",我)=账户   应用程序(“User_Log   时间   _",我现在)=()   & # 39;解除锁定   Application.Unlock   退出   结束   如果   下一个


要取得使用者的相关变量数据则就像下面的做法:

Response.Write(应用程序(“User_Account_",会话(“Index")

你可能会发现,不是说不要使用会话吗?那为什么上面的原始码中还有会话的存在?前面也说过,这替代方案并不能完全代替掉会话,浏览器并不是一直和服务器处于联机状态的,读取完页面就断的线,那我们要怎么知道下次联机的还是同一个人呢?这时候就必须要靠会话,我们给使用者一组实时的编号,此编号就是使用者于应用程序上变量空间的号码,你可以想象成银行中有很多的保险箱,你拥有一支钥匙,而钥匙上有编的号,钥匙上的编号可以让行员带领你去你自己的保险箱。此方法尚还有改进之处,但对小型的应用程序已经是很够用了。

ASP中会话的使用案例