电脑技术学习

如何调试ASP脚本(二)

dn001

在将 SessionID cookie 存储于用户的浏览器之后,即使用户请求了另一个 .asp 文件,或请求了运行在另一个应用程序中的 .asp 文件,ASP 仍会重用该 cookie 跟踪会话。与此相似,如果用户故意放弃会话或让会话超时,然后再请求另一个 .asp 文件,那么 ASP 将以同一个 cookie 开始新的会话。只有当服务器管理员重新启动服务器或用户重新启动 Web 浏览器时,此时存储在内存中的 SessionID 设置将被清除,用户将会获得新的 SessionID cookie。

通过重用 SessionID cookie,ASP 将发送给用户浏览器的 cookie 数量降为最低。另外,如果您决定您的 ASP 应用程序不需要会话管理,就可以不让 ASP 跟踪会话和向用户发送 SessionID 。

ASP 在以下情况下不发送会话的 cookie:

应用程序的会话状态被禁用。

ASP 页被定义为无会话,即该页包含 <%@ EnableSessionState=False %> 标记。详细信息,请参阅 无会话的 ASP 页。

请注意,SessionID cookie 并不提供跟踪用户对某个 Web 站点的多次访问的永久方法。存储在服务器内存中的 SessionID 信息很容易丢失。如果想跟踪在很长时间内访问您的 Web 应用程序的用户,必须通过在用户的 Web 浏览器中存储一个专门的 cookie,并将 cookie 信息保存到数据库中来创建一个用户标识。详细信息,请参阅 使用 Cookie。

在 Session 对象中存储数据

Session 对象提供了一个可在其中存储信息的动态关联数组。您可以在 Session 对象中存储数值变量和对象变量。

通过对 Session 对象中的命名项赋值,可将变量存储在 Session 对象中。例如,以下命令将两个新变量存储在 Session 对象中:

<%

Session("FirstName") = "Jeff"

Session("LastName") = "Smith"

%>

通过访问该命名项可从 Session 对象中获取信息。例如,显示 Session("FirstName") 的当前值:

Welcome <%= Session("FirstName") %>

可以在 Session 对象中存储用户的首选项,然后通过访问首选项来决定将哪一页发送给用户。例如,可以允许用户在您的应用程序的第一页中指定纯文本版本的内容并将这一选择应用到用户此后对该应用程序的所有页的访问上。

<% If Session("ScreenResolution") = "Low" Then %>

This is the text version of the page.

<% Else %>

This is the multimedia version of the page.

<% End If %>

您也可以在 Session 对象中存储一个对象实例,但这样做会影响服务器的性能。详细信息,请参阅 设置对象作用域。

管理 Web Farm 的会话

ASP 会话信息存储在 Web 服务器中。浏览器必须向 Web 服务器请求页才能获得用来访问会话信息的脚本。在 Web Farm(其中许多 Web 服务器共同承担响应用户申请的责任)中,用户的请求并不总是被路由到同一个服务器,而是由一个被称为负载平衡进程的特殊软件对此 URL 站点的申请分配任意一个空闲的服务器。负载平衡进程使在 Web Farm 中保存会话信息变得更加困难。

为了在一个负载被平衡的站点上使用 ASP 会话管理,必须保证用户会话的所有请求都被定向到同一个 Web 服务器。一种做法是编写一个 Session_OnStart 过程,此过程使用 Response 对象将浏览器重定向到运行该用户会话的 Web 服务器。如果在您的应用程序页中的所有链接都是相对的,那么以后对某一页的所有请求都将被路由到同一个服务器。

例如,某用户要通过请求某一站点的通用 URL:http://www.microsoft.com 来访问一个应用程序。负载平衡进程将申请路由到服务器 server3.microsoft.com。ASP 在此服务器上生成了一个新的用户会话。在 Session_OnStart 过程中,浏览器被重定向给指定的服务器:

<% Response.Redirect("http://server3.microsoft.com/webapps/firstpage.asp") %>

浏览器将请求指定的页,并且以后的所有请求都将被路由到同一个服务器。

使用 Cookie

cookie 是 Web 服务器嵌在用户的 Web 浏览器中,用来代表用户的令牌。当下次同一浏览器请求一页时,它将发送从 Web 服务器收到的 cookie。 cookie 允许有一组信息与用户关联。 ASP 脚本使用 Response 和 Request 对象的 Cookies 集合,可以获取和设置 cookie 的值。

标签: