session对象的默认有效期为几分钟,session一段时间,ASP中Session技巧 默认过期时间为20分钟

session对象的默认有效期为几分钟,session一段时间,ASP中Session技巧 默认过期时间为20分钟 写过稍微大一点的ASP的人都知道,Session对象真的很好用。可以用来记录用户的私有数据变量,既安全又方便。但是你真的知道Session是如何工作的吗? 写过稍微大一点的ASP的人都知道,Session对象真的很好用。可以用来记录用户的私有数据变量,既安全又方便。但是你真的知道Session是如何工作的吗?可能你了解之后,就再也不敢用这个你又爱又恨的对象了。替代方法虽然有点麻烦,但是经过长期考虑还是要这么做的。 首先说一下Session的好处。可以用来记录客户端的私有数据变量,不会及时消失。这是一个非常重要的功能,尤其是对于有成员的系统。比如登录账号,会员的时间和状态,以及这个记录的很多实时数据(比如购物系统记录用户购物篮里的商品),这些信息属于每个用户的私人需求,通常开发者使用Session来记录和处理。 但是ASP中的会话是由cookie组成的,服务器将会话中记录的所有数据以cookie的形式传输到用户的浏览器。一般来说,浏览器会存储这些Cookies。每当用户点击链接并再次与服务器连接时,浏览器会将这些Cookies发送回服务器进行处理。这就是Session的运行原理。当数据量较大时,必须发送出去并收回,这不仅消耗了线路的带宽,而且降低了性能,因为服务器不得不花费更多的资源进行在线处理和内存重新配置等初始操作。现在你可能会想,“我得用这个函数,所以我得牺牲一些点。”但是,本文一方面讲Session教大家少用;另一方面,当然也有替代品,然后属于Global.asa的应用对象登场。 应用程序也是记录和处理临时数据的专家。它各方面的能力和用法都和Session一样,但相比之下,它记录的数据是公共的,也就是任何用户都可以共享的变量空间。与会话不同,应用程序不会将数据发送给用户,然后在下一次在线连接后读回数据。它直接记录在服务器上的内存中,在性能上比Session快得多。 由于应用对象是公共的,首先要做的就是为每个用户规划一个公共区域,让每个用户都有自己的区域来记录数据,从而达到模拟会话的目的。现在有两种方法: 首先,当服务器被激活时,用户的内存空间被预先初始化和分配。通常这种方式虽然服务器一开机就占用大量资源,但也省去了每次用户在线都要分配一次的麻烦。然而,有一个限制。使用这种方法时,必须限制最大人数。由于它是一激活就初始化的,所以我们只能估计需要构建的内存空间量,所以这种方法通常用于聊天室之类的小程序。 第二,这种方法应该更适合大规模应用。采用动态分配方法。当用户第一次连接到服务器时,资源会分配给该用户。这两种方案模拟会话的目的都是为了减少会话资源的消耗,但毕竟不能完全替代。我们还是要用一点Session,至少可以减轻服务器的负担。 第一个计划 首先,让我们开始实施第一个方案。因为应用程序是在激活时初始化的,所以我们必须从Global.asa开始: 初始化已经完成,但是如何使用呢?我们只需要把Session原来存储的数据,比如账号,登录时间,改成我们构建的application对象就行了:把代码复制如下:'查找i=1的未使用空间到application ('clientmax ')如果application ('user _ status _' i)=0那么'用户临时号Session('Index')=i '锁定Application应用。“Lock”设置为已用状态Application(' User _ Status _ ' I)=1 ' put in variable data Application(' User _ account _ ' I)=account Application(' User _ log time _ ' I)=now()'以解锁应用程序。如果下一步,解锁结束出口。 获取用户的相关变量数据,如下图: 回应。写入(应用程序('用户帐户_ '会话('索引')) 你可能会发现,你不是说不要使用会话吗?那为什么上面的源代码里会有Session?如前所述,这种替代方法不能完全取代会话。浏览器并不总是和服务器在线,看完页面就会断开连接。那么我们怎么知道下一次会不会是同一个人在线呢?这时候就要靠Session了。我们给用户一组实时数字,这些数字是应用程序的变量空间中的数字。你可以想象一下,银行里有很多保险柜,你有一把带号码的钥匙。钥匙上的号码可以让职员带你去你自己的保险箱。这种方法仍有改进的余地,但对于小型应用来说已经足够了。 第二个计划 至于之前的方案,你可能也认为我们的自定义号是按会话记录的。对于数字,Session对象提供了一个“sessionid”方法。没错,不管我们要不要用,服务器都会自动为每个用户列出号码,而且这个号码不会重复。至于这个数,是Session得到的。SessionID这个编号是Session一定会做的动作,所以我们可以用它来代替自己写的编号程序,这样又省了一份力气,甚至有更大的扩展性。但基本上,上述第一种方案在小型应用中仍有其用途,如可以限制人数的聊天室,第二种备选方案则针对较大的系统。 每秒几百、几千甚至上万人上的网站,用以前的方案肯定不行。假设您将最大人数设置为10,000人。一旦服务器被激活,它会为你切出10000个区域,为10000个用户做准备。如果一个区域有五个变量,一个变量占32 Byte,一万个占320000 K(320MB)以上。服务器一激活,那么多垃圾就往内存里塞,上战场之前性能必然下降很多。而且这些数字虽然少,但是我觉得我的512 MB就够了。上述数字被认为是最低的数字。另外,我们不知道服务器在配置内存时会使用多少额外的资源,所以只会多不会少。所以解决方法是动态分配用户变量空间,只在一个用户连接到服务器的时候切出一个区域,这样就不需要提前分配巨大的内存。 第二个计划做起来相对简单。请扔掉第一个计划中的所有东西。我们不需要转移到Global.asa,你只需要改变用户登录的地方和其他有用的地方:复制代码如下:' Lock ApplicationApplication。“锁定”并放置变量数据应用程序(' User _ Account _ ' Session . Session id)=帐户应用程序(' User_Logtime_' Session。SessionID)=Now()解锁应用程序。解锁获取用户相关变量数据如下:复制代码如下:response . write(application(' user _ account _ ' session . session id))。以前看很多书,都写了会话对资源的吞噬很厉害,尽量不要用,但是必要的时候还是可以用的,书上也没有合适的解决方法。既然知道了如何替换Session,那就好好利用吧!也许一直困扰我的性能问题可以改善很多!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: