当前位置:web 服务器 > IIS >>

管理会话(转自IIS5.0文档)

答案:

管理会话


成功开发 Web 应用程序的难题之一便是:当用户从应用程序中的一页转到另一页时,要维护整个访问或“会话”期间的用户信息。HTTP 是非状态协议,也就是说 Web 服务器将每个网页请求都当作独立的请求,服务器不保留以前请求的任何信息,即使它们只早于当前请求几秒钟。这种无法记忆先前请求的缺陷使得编写应用程序很困难,比如编写联机目录,应用程序可能要跟踪当用户在目录中不同页间跳转时所选的目录项目。
ASP 为管理会话信息问题提供了独特的解决方案。使用 ASP Session 对象和服务器生成的特定用户 ID,可以创建更聪明的应用程序,以便标识每次访问的用户并收集信息,应用程序随后就可以利用这些信息来跟踪用户喜好或选择。
要点 ASP 通过 HTTP cookie 指派用户 ID,cookie 是存储在用户浏览器中的小文件。因此,如果正在为不支持 cookie 的浏览器创建应用程序,或者如果用户浏览器设置为拒绝 cookie,则不要使用 ASP 的会话管理功能。

启动和结束会话


会话有四种开始方式:
  • 新用户请求的 URL 标识应用程序中的 .asp 文件,并且该应用程序的 Global.asa 文件包含 Session_OnStart 过程。
  • 用户保留有“Session”对象中的值。
  • 只要服务器收到的请求中不包含有效的 SessionID cookie,就将自动启动新会话。
  • 用户请求应用程序中的 .asp 文件,并且应用程序的 Global.asa 文件使用 <OBJECT> 标记在会话间实例化对象。关于使用<OBJECT> 标记来创建对象实例的详细信息,请参阅使用组件和对象

如果用户在指定时间间隔内没有请求或刷新应用程序中的网页,会话将自动结束。默认情况下该值为 20 分钟。可以通过设置 Internet 信息服务管理单元“应用程序选项”属性页中的会话超时。 该值的设置取决于 Web 应用程序的要求以及服务器的内存容量。例如,如果希望浏览 Web 应用程序的用户在每页上只停留几分钟,则可以使会话超时值远低于默认值。会话超时过长可能导致打开的会话太多,这将增加服务器内存资源的负担。
对于特定会话,如果要设置低于默认应用程序超时的超时间隔,也可以设置“Session”对象的“Timeout”属性。例如,下面脚本设置的超时间隔为 5 分钟。
<%  Session.Timeout = 5  %>

也可以使超时间隔大于默认值,该值由“会话超时”属性决定。
注意“Timeout”只适用于具有状态的会话。在“无状态会话”期间,“Session”对象不包含内容或静态对象。此类会话在请求处理完毕后自动结束,并当收到同一浏览器的下一个请求时重新创建。

另外,如确实希望结束会话,可以使用“Session”对象的 Abandon 方法。例如,可以在窗体中提供“退出”按钮,在该窗体中对包含下列命令的 .asp 文件 URL 设置 ACTION 参数。
<% Session.Abandon %>

注意 如果排队等待执行的用户请求优先于初始化 Session.Abandon,则这些请求将在所要放弃会话的环境中执行。当 Session.Abandon 执行完毕后,新收到的请求不与该会话相关联。

关于 SessionID 和 Cookies


用户第一次请求特定应用程序内的 .asp 文件时,ASP 将生成一个“SessionID”。这是通过复杂算法产生的数值,SessionID 唯一标识每个用户的会话。新会话开始时,服务器将 Session ID 作为 cookie 存储到用户 Web 浏览器中。
SessionID cookie 类似于小橱柜钥匙,当用户在会话期间与应用程序交互时,ASP 可以将用户信息储存到服务器上的“小橱柜”内。用户 SessionID cookie(在 HTTP 请求头文件内传送)同意以小橱柜钥匙允许访问小橱柜内容的方式访问该。ASP 每次收到网页请求时,都检查 HTTP 请求头文件内的 SessionID cookie。
将 SessionID cookie 存储到用户浏览器后,即使用户请求其他 .asp 文件或请求在其他应用程序中运行的 .asp 文件,ASP 也会重复使用同一 cookie 来跟踪会话。同样,如果用户主动放弃会话或放任会话超时,然后继续请求其他 .asp 文件,ASP 仍旧使用同一 cookie 开始新会话。用户收到新 SessionID cookie 的唯一机会就是,服务器管理员重新启动服务器从而清除存储在内存中的 SessionID 设置,或者用户重新启动 Web 浏览器。
通过重复使用 SessionID cookie,ASP 将发送到浏览器的 cookie 数量减到最少。另外,如果确定 ASP 应用程序不需要会话管理,则可以禁止 ASP 跟踪会话和向用户发送 SessionID cookie。
在下列情况下,ASP 将不会发送会话 cookie:
  • 应用程序禁用会话状态。
  • ASP 页定义为无会话,即包含
    <%@ EnableSessionState=False %>
    标记的页。详细信息,请参阅无会话 ASP 页

还应注意 SessionID cookie 并不是跟踪用户对 Web 站点进行多次访问的永久途径。SessionID 信息存储在服务器计算机内存中,很容易丢失。如果要在很长时间间隔内跟踪访问 Web 应用程序的用户,必须创建用户标识,方法是将特定 cookie 存储到用户 Web 浏览器并将 cookie 信息保存到数据库。详细信息,请参阅使用 Cookie

存储和删除“Session”对象中的数据


“Session”对象提供动态关联数组,可以在数组中存储信息。可以在“Session”对象中存储单纯变量和对象变量。
要在“Session”对象中存储变量,需指定“Session”对象中已命名条目的值。例如,下面的命令将两个新变量存储到“Session”对象:
<%Session("FirstName") = "Jeff"Session("LastName") = "Smith"%>

要从”Session”对象中检索信息,访问已命名的条目即可。例如,要显示 Session("FirstName") 的当前值:
欢迎<%= Session("FirstName") %>

可以将用户首选项存储到”Session”对象中,然后访问这些首选项以便确定返回给用户的页面。例如,可以允许用户在应用程序首页中指定只查看纯文本内容,然后将此项选择应用于用户在该应用程序中访问的所有后续页。
<% If Session("ScreenResolution") = "Low" Then %>这是文字页面。<% Else %>这是多媒体页面。<% End If %>

也可以在”Session”对象中存储对象例程,虽然这样做可能影响服务器性能。详细信息,请参阅设置对象作用域
有时,可能希望删除”Session”对象中存储的项目。例如,对于访问网上零售店的用户来说,改变主意、放弃一系列采购项目并作出全新的选择是不常见的。在这种情况下,删除不适宜的值并更新”Session”对象将会非常有用。
“Session”对象的 Contents 集合包含已存储的所有会话变量(即那些没有使用 HTML 的 <OBJECT> 标记存储的变量)。通过使用“Contents”集合中的 Remove 方法,可以有选择地删除为会话状态添加的变量引用。下面脚本说明如何使用“Remove”方法来清除”Session”对象中的项目(这里为用户折扣信息):
<%If Session.Contents("Purchamnt") <= 75 thenSession.Contents.Remove("Discount")End If%>

如果需要,也可以使用“Contents”集合的 RemoveAll 方法完全删除已存储的所有会话变量:
Session.Content.RemoveAll()
使用“Remove”方法时可以按照名称或索引来删除项目。下列脚本说明如何循环查看”Session”对象中存储的值并按照索引有条件地删除项目:
<%For Each intQuote in Session.ContentsIf Session.Contents(intQuote) < 200 ThenSession.Contents.Remove(intQuote)End IfNext%>

管理多服务器的会话


ASP 会话信息存储于 Web 服务器。浏览器必须请求同一 Web 服务器的网页以便脚本访问会话信息。在 Web 服务器群集(由许多 Web 服务器共同响应用户请求)中,用户请求不会总是路由到同一服务器。相反,专用软件将对站点 URL 的请求分发到任一空闲的服务器,该进程称为“平衡加载”。平衡加载使得维护 Web 服务器群集上的会话信息十分困难。
要在平衡加载的站点上使用 ASP 会话管理,必须确保用户会话中的所有请求都发送到同一 Web 服务器。一种方法是编写 Session_OnStart 过程,该过程通过“Response”对象将浏览器重定向到运行用户会话的特定 Web 服务器。如果应用程序页中的链接都是相对链接,则未来请求都将路由到同一服务器。
例如,用户访问应用程序时可能请求站点的一般 URL:http://www.microsoft.com.加载平衡程序将请求路由到指定服务器,如 server3.microsoft.com。ASP 在该服务器上创建新会话。在“Session_O

上一个:调试 ASP 脚本(转自IIS5.0文档)
下一个:IIS 5.0 中的 ASP 有啥改善(台湾)

Apache
IIS
Nginx
Tomcat
如果你遇到web 服务器难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,