当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > ASP教程 > 正文 |
|
|||
维护ASP的会话状态 | |||
2005-12-30 19:21:24 文/45IT收集 出处:电脑软硬件应用网 | |||
现在让我们看看传统的ASP和现代的ASP.NET围绕会话ID的使用而存在的一些问题。然后,我们讨论下运行多个Web服务器时的会话问题。 ASP.NET下的会话ID有所变化。在使用 ASP.NET 时,会话ID是由URL合法ASCII字符组成的一个120位字符串。根据微软文档的说明,产生会话 ID 值采用了保证其唯一性的算法,从而避免出现两个客户试图采用同一ID时出现的会话冲突。另外,会话ID的随机性使得确定现有会话的ID变得非常困难从而带来了额外的安全性。同传统ASP一样,ASP.NET的会话ID通常也作为非持久保存的cookie存储在客户机上。这种cookie的格式同传统ASP相比稍有变化,例如,asp.net_sessionid=jhmbobkcbinehlpkjhopabbe。 除了维持状态的传统型的、非持久保存的cookie的方法之外,ASP.NET还支持一种不采用cookie的会话状态维持模式。在启用无cookie模式的情况下,ASP.NET在发送回客户机的URL中嵌入会话ID。这样就为使用不支持cookie或禁用cookie浏览器的客户提供了会话状态坚持。考虑到利用cookie跟踪客户信息的举动,我们有理由对无Cookie模式保持高度的关注。 如何使用会话ID 内容集合 静态对象(StaticObject)集合包含了会话范围内、用GLOBAL.ASA的<OBJECT>标签添加到应用程序中所有对象。同内容集合一样,StaticObject集合也是一个联合数组,其访问方式也相同。不过,StaticObject集合仅仅包含了用<OBJECT>实例化的对象而并不包含那些用Server.CreateObject方法实例化的对象。 一个客户就只有一个会话ID吗 在分配会话ID时,每个服务器都是独立进行操作的。因为这一缘故,Web服务器A就并不知道Web服务器B已经把会话ID 706616434分配给了某一客户。因此,如果Web服务器A收到具有会话ID 706616434的客户请求,这一请求会被当作会话超时进行处理,Web服务器A随即分配一个新的会话ID。在发生这种情况时,客户在Web服务器B上就失去了自己的状态,而且在可能发生重复操作的情况下必须从头开始。避免出现这一问题方法之一就是保证客户的所有请求都被发送给了同一服务器。 在虚拟目录下运行应用程序是实现同一Web服务器上隔离运行多个应用程序的方法之一。但是你得记住,当某一个应用程序调用另一应用程序时就会产生新的会话ID。这样就会丢弃第1个会话 ID及其关联存储的所有会话变量。取决于应用程序的具体情况,状态的丢失可能并不成为问题,但在调试会话时对此问题必须有足够的认识。 小结 |
|||
关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 | |
Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号 |